您的位置:首页 > Web前端

1578: [Usaco2009 Feb]Stock Market 股票市场

2017-09-10 15:56 387 查看
题目链接

题目大意:有S种股票,已经知道每一天每一种股票的价格。一共有d天,一开始拥有的钱为m,求最后总共能够拥有多少钱

题解:看上去决策非常复杂,似乎需要枚举购买时间

实际上,只需要将第i天向第i+1天转移就可以了

因为第一天买第三天卖出=第一天买第二天卖,再用原价买回来,然后第三天卖出

做D-1次完全背包即可

我的收获:状态的转移……转移的方向……

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;

const int N=55;

int S,D,M;
int mp

;
int f[500005];

void work()
{
for(int i=1;i<D;i++){
memset(f,0,sizeof(f));//注意清空数组
for(int j=1;j<=S;j++){
int w=mp[i][j],v=mp[i+1][j];
for(int k=w;k<=M;k++)
f[k]=max(f[k],f[k-w]+v-w);
}
M+=f[M];
}
printf("%d\n",M);
}

void init()
{
cin>>S>>D>>M;
for(int i=1;i<=S;i++)
for(int j=1;j<=D;j++)
scanf("%d",&mp[j][i]);
}

int main()
{
init();
work();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: