完全揹包-01小P尋寶記——好基友一起走
阿新 • • 發佈:2018-12-23
小P尋寶記——好基友一起走
Time Limit: 1000 ms Memory Limit: 65536 KiB
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; }