题目大意:给你一笔金额,你要将这比金额去投资,现在有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