POJ 2063 Investment 變形的完全揹包

題意:John有X元錢。現在有D種理財產品,給出每種理財產品的價格(1000的整數倍),每年得到的回報。現在John想投資N年,問得到的最大回報是多少。

思路:一件物品可以買無限次,這是個標準的完全揹包。因爲每年得到的回報可以作爲下一年的資金,所以這裏要發生變化的是揹包的容量。

代碼如下:

#include <cstdio>
#include <algorithm>
#include <cstring>

using namespace std;

const int MAX = 50000;

int dp[MAX],w[MAX],v[MAX];

int main(void)
{
    //freopen("input.txt","r",stdin);
    int T,V,N,D;
    scanf("%d",&T);
    while(T--){
        scanf("%d%d%d",&V,&N,&D);
        for(int i = 0; i < D; ++i){
            scanf("%d%d",&w[i],&v[i]);
            w[i] /= 1000;
        }
        for(int u = 0; u < N; ++u){
            int M = V / 1000;
            memset(dp,0,sizeof(dp));
            for(int i = 0; i < D; ++i)
                for(int j = w[i]; j <= M; ++j)
                    dp[j] = max(dp[j],dp[j-w[i]]+v[i]);
            V += dp[M];
        }
        printf("%d\n",V);
    }
    return 0;
}

發佈了283 篇原創文章 · 獲贊 4 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章