51Nod 1085 揹包問題 dp

2021-09-19 05:16:18 字數 1047 閱讀 5749

在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 6

2 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...