题目大意:给你一笔金额,你要将这比金额去投资,现在有t种股票,每种股票都有一个价值和年收益,问你如何投资在n年后的最大收益
思路:由于获益后的钱加上本金可以再来投资,所以背包容量变化,这点还是不难的,主要本题给了一个信息:股票的价值都是1000的倍数,所以后面可以空间优化,对每个价值除以1000对背包容量优化
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> using namespace std; int w[15],v[15]; int dp[100000]; int main() { int T; scanf("%d",&T); int s,y; while(T--) { scanf("%d%d",&s,&y); int m; scanf("%d",&m); for(int i=1;i<=m;i++) scanf("%d%d",&w[i],&v[i]); for(int i=1;i<=m;i++) w[i]/=1000; int ans=s; while(y--) { int mmax=ans/1000; memset(dp,0,sizeof(dp)); for(int i=1;i<=m;i++) for(int j=w[i];j<=mmax;j++) dp[j]=max(dp[j],dp[j-w[i]]+v[i]); ans+=dp[mmax]; } printf("%d\n",ans); } return 0; }
POJ 2063 Investment(完全背包--容量变化)
原文:http://blog.csdn.net/kalilili/article/details/44647215