求第一个点数据

P2569 [SCOI2010] 股票交易

```cpp #include<cstdio> #define T 2005 int t,maxp,w,ap[T],bp[T],as[T],bs[T],cnt; int dp[T][T];//第i天 手持股票j股 赚钱 int hed[T]; inline int rd() { int f=1,c=0;char ch = getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){c=10*c+ch-'0';ch=getchar();} return f*c; } int max(int a,int b) { return a>b?a:b; } int main() { t=rd(),maxp=rd(),w=rd(); for(int i=1;i<=t;i++) { ap[i]=rd(),bp[i]=rd(),as[i]=rd(),bs[i]=rd(); } for(int i=0;i<=t;i++) { for(int j=1;j<=maxp;j++) { dp[i][j]=-0x7fffffff; } hed[i]=-0x7fffffff; } hed[0]=0; for(int i=1;i<=t;i++) { if(i-w-1>0) { for(int j=0;j<=maxp;j++) { if(dp[i-w-1][j]==-0x7fffffff)break; hed[j]=max(hed[j],dp[i-w-1][j]); } for(int j=0;j<=maxp;j++) { dp[i][j]=dp[i-1][j]; } for(int j=0;j<=maxp;j++)//原状态 { if(hed[j]==-0x7fffffff)break; for(int k=1;k<=as[i]&&j+k<=maxp;k++) { dp[i][j+k]=max(dp[i][j+k],hed[j]-ap[i]*k); } for(int k=1;k<=bs[i]&&j-k>=0;k++) { dp[i][j-k]=max(dp[i][j-k],hed[j]+bp[i]*k); } } }else { for(int j=0;j<=maxp&&j<=as[i];j++) { dp[i][j]=max(dp[i-1][j],-ap[i]*j); } } } printf("%d\n",dp[t][0]); return 0; } ```
by LiGuanlin1124 @ 2018-06-28 20:36:09


求大神指点
by LiGuanlin1124 @ 2018-06-28 20:39:26


问题已解决,谢谢
by LiGuanlin1124 @ 2018-06-28 21:09:13


|