1. 程式人生 > >完全揹包-01小P尋寶記——好基友一起走

完全揹包-01小P尋寶記——好基友一起走

小P尋寶記——好基友一起走

Time Limit: 1000 ms Memory Limit: 65536 KiB

Submit Statistic

Problem Description

話說,上次小P到伊利哇呀國旅行得到了一批寶藏。他是相當開心啊,回來就告訴了他的好基友小鑫,於是他們又結伴去伊利哇呀國尋寶。

這次小P的尋寶之路可沒有那麼的輕鬆,他們走到了一個森林,小鑫一不小心被觸發了機關,被困在了一個大籠子裡面,籠子旁邊上有一道題目和一個密碼鎖,上面說只要解出此題輸入密碼即可救出被困人。小鑫不是很聰明,所以他做不出來,他知道小P很笨,更解不出來。所以他就讓小P獨自回去,不用管他。但是小P重情重義不會拋棄他離去。他說:“不,好基友一起走!”。於是就感動了上帝,上帝特派你來替他們解決問題。聰明的你要加油了啊!

題目描述:給你n種物品和一個體積為v的包包。每種物品有無數種,體積是vi價值是wi。求出包包v所能裝的最大價值的東西。

Input

多組輸入。第一行有兩個正整數n(0<n<=10000), v(0<v<= 10000)。接下來兩行每行有n個數字。第一行表示每種物品的價值wi(0<wi<100),第二行表示每種物品的體積vi(0<vi<100)。

Output

輸出最多可以得到的價值。輸出結果救出小鑫。

Sample Input

5 20
1 2 3 4 5
2 6 3 5 4

Sample Output

25

Hint

 

Source

xfl

 

/*完全揹包*/
#include <bits/stdc++.h>
using namespace std;
int vi[10005], wi[10005];
int dp[10005];
int main()
{
    int n, v;
    while (cin >> n >> v)
    {
        memset(dp, 0, sizeof(dp));
        for (int i = 0; i < n; i++)
            cin >> wi[i];
        for (int i = 0; i < n; i++)
            cin >> vi[i];

        for (int i = 0; i < n; i++)
        {
            for (int j = vi[i]; j <= v; j++) // 從cost開始
            {
                if (j >= vi[i])
                    dp[j] = max(dp[j], dp[j - vi[i]] + wi[i]);
            }
        }
        cout << dp[v] << endl;
    }
    return 0;
}