商业澳洲 文章 [USACO 2009 Feb] 股票市场

[USACO 2009 Feb] 股票市场

尽管奶牛天生谨慎,它们仍然在住房抵押信贷市场中大受打击,现在它们准备在股市上碰碰运气。贝西有内部消息,她知道S只股票在今后D天内的价格。假设在一开始,她筹集了M元钱,那么她该怎样操作才能赚到最多的钱呢?贝西在每天可以买卖多只股票,也可以多次买卖同一只股票,交易单位必须是整数,数量不限。
举一个牛市的例子。假设贝西有10元本金,股票价格如下:
股票 今天的价格 明天的价格 后天的价格
A 10 15 15
B 13 11 20
最赚钱的做法是:今天买入 A 股 1 张,到明天把它卖掉并且买入 B 股 1 张,在后天卖掉 B 股,这样贝西就有24元了。

2 3 10

10 15 15

13 11 20

24

如果这题想成了贪心,那你就跪了。

这题可以用动规做,为什么没有后效性呢?

因为昨天的股票明天卖就相当于今天卖了再买回来

接下来就可以当做完全背包做了。

#include<algorithm> #include<iostream> #include<iomanip> #include<cstring> #include<cstdlib> #include<vector> #include<cstdio> #include<cmath> #include<queue> using namespace std; inline const int Get_Int() { int num=0,bj=1; char x=getchar(); while(x<'0'||x>'9') { if(x=='-')bj=-1; x=getchar(); } while(x>='0'&&x<='9') { num=num*10+x-'0'; x=getchar(); } return num*bj; } int n,m,Shares[105][105],Money,f[500005]; int main() { n=Get_Int(); m=Get_Int(); Money=Get_Int(); for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) Shares[i][j]=Get_Int(); for(int i=2; i<=m; i++) { memset(f,0,sizeof(f)); for(int j=1; j<=n; j++) for(int k=Shares[j][i-1]; k<=Money; k++) f[k]=max(f[k],f[k-Shares[j][i-1]]+Shares[j][i]-Shares[j][i-1]); Money+=f[Money]; } printf("%d\n",Money); return 0; }

原文链接:https://blog.csdn.net/Bill_Yang_2016/article/details/53454517?ops_request_misc=&request_id=b5e600632dce4381ad8e7299e81689cb&biz_id=&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~koosearch~default-22-53454517-null-null.268%5Ev1%5Econtrol&utm_term=%E6%BE%B3%E6%B4%B2%E8%B4%A2%E7%BB%8F

作者: 知澳头条

知澳资深作者

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

联系我们

联系我们

1300766331

邮箱: info@getau.com.au

澳洲本地网站设计开发团队 超20人团队,悉尼设计开发14年 联系电话:1300766331 微信: XtechnologyAU
关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部