bzoj1578[Usaco2009 Feb]Stock Market 股票市场*

bzoj1578[Usaco2009 Feb]Stock Market 股票市场

题意:

知道S只股票D天的价格。初始时有M元,问最后最多多少钱。S≤50,D≤10,M≤200000。

题解:

首先可以得出头日买了股票第二天立刻卖掉等价与拖几天再卖(因为可以卖掉后立刻买相同的数量)。故对每一天单独做完全背包,得到每天的最大收益第二天用即可。

代码:

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 #define INF 0x3fffffff
 5 #define inc(i,j,k) for(int i=j;i<=k;i++)
 6 using namespace std;
 7 
 8 inline int read(){
 9     char ch=getchar(); int f=1,x=0;
10     while(ch<'0'||ch>'9'){if(ch=='-')f=-1; ch=getchar();}
11     while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
12     return f*x;
13 }
14 int a[60][20],s,d,m,f[500010],mx;
15 int main(){
16     s=read(); d=read(); m=read(); inc(i,1,s)inc(j,1,d)a[i][j]=read(); mx=m;
17     inc(i,1,d-1){
18         memset(f,0,sizeof(f));
19         inc(j,1,s)inc(k,a[j][i],mx){f[k]=max(f[k],f[k-a[j][i]]+a[j][i+1]-a[j][i]);} mx=mx+f[mx];
20     }
21     printf("%d",mx); return 0;
22 }

20161011

原文地址:https://www.cnblogs.com/YuanZiming/p/5978813.html