POJ 2063 Investment(完全背包--容量变化)

来源:互联网 发布:nginx需要哪些运行库 编辑:程序博客网 时间:2024/05/22 17:06

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


0 0