在n件物品取出若干件放在容量為w的揹包裡,每件物品的體積為w1,w2……wn(wi為整數),與之相對應的價值為p1,p2……pn(pi為整數)。求揹包能夠容納的最大價值。
第1行,2個整數,n和w中間用空格隔開。n為物品的數量,w為揹包的容量。(1 <= n <= 100,1 <= w <= 10000)第2 - n + 1行,每行2個整數,wi和pi,分別是物品的體積和物品的價值。(1 <= wi, pi <= 10000)
輸出可以容納的最大價值。
3 62 53 8
4 9
14經典的 動態規劃問題 我的解題思路 外層迴圈為物品種類 內層迴圈為揹包容量 針對每個物體 有兩種選擇 放 或者是不放
動態規劃三步走
1. 確定初始狀態這個很容易 就是什麼也沒裝 f(0,0) = 0
2.確定狀態轉移方程動態規劃解決的就是 存在重複子問題的最優性問題 所以先把問題 分解成子問題 前面我們也提到了對於每個物體的處理有兩種 放 或者不放 f(n,p)就由 f(n-1,p-w[i])或者 f(n-1,p) 轉移過來 我們只要取兩個中的那個較大值 同理 一直往前推 就能推到我們的初始狀態 所以 我們的 狀態轉移方程就是 f(n,p)=max
3 確定邊界條件這個就更好處理了 邊界條件 無非就是物品總共個數和揹包容量
剩下的就不用多說了
#include#includeusing namespace std;
const int n = 100+5;
int w[n];
int v[n];
int dp[n][n*n];
int main()
for(int i = 1; i <= n ;i++) }
printf("%d\n",dp[n][package]);
return 0;
}
51Nod 1085 揹包問題
在n件物品取出若干件放在容量為w的揹包裡,每件物品的體積為w1,w2 wn wi為整數 與之相對應的價值為p1,p2 pn pi為整數 求揹包能夠容納的最大價值。input 第1行,2個整數,n和w中間用空格隔開。n為物品的數量,w為揹包的容量。1 n 100,1 w 10000 第2 n 1行,每...
51NOD1085揹包問題
在n件物品取出若干件放在容量為w的揹包裡,每件物品的體積為w1,w2 wn wi為整數 與之相對應的價值為p1,p2 pn pi為整數 求揹包能夠容納的最大價值。第1行,2個整數,n和w中間用空格隔開。n為物品的數量,w為揹包的容量。1 n 100,1 w 10000 第2 n 1行,每行2個整數,...
51nod 1085 揹包問題
link 在n件物品取出若干件放在容量為w的揹包裡,每件物品的體積為w1,w2 wn wi為整數 與之相對應的價值為p1,p2 pn pi為整數 求揹包能夠容納的最大價值。input 第1行,2個整數,n和w中間用空格隔開。n為物品的數量,w為揹包的容量。1 n 100,1 w 10000 第2 n...