問題描述:
給定n種物品和一揹包。物品i的重量是wi,其價值為vi,揹包的容量為c。問應如何選擇裝入揹包的物品,使得裝入揹包中物品的總價值最大?
對於一種物品,要麼裝入揹包,要麼不裝。所以對於一種物品的裝入狀態可以取0和1.我們設物品i的裝入狀態為xi,xi∈ (0,1),此問題稱為0-11揹包問題。
資料:物品個數n=5,物品重量w[n]=,物品價值v[n]=。
編碼:
#include
using namespace std;
int main();
int n,c;
printf("物品個數和揹包容量:\n");
scanf("%d
%d",&n,&c);
printf("輸入物品重量和價值:\n");
for(i=1;i<=n;i++)
for(i=1;i<=n;i++)
else
dp[i][j]=dp[i-1][j]>dp[i-1][j-w[i]]+v[i]?dp[i-1][j]:dp[i-1][j-w[i]]+v[i];}}
intx[10]=;
j=c;
for(i=n;i>=1;i--)
}printf("%d\n",dp[n][c]);
for(i=1;i<=n;i++)
}
輸出結果:
可借助**來幫助理解,重點在狀態轉移公式上
演算法(一) 動態規劃法
使用乙個二維陣列 val i j 存放當前容量下的最大價值,其中第 i 行表示可選物品中加入 第 i 個物品,j 為當前揹包的假設容量,val i j 表示假設當前的揹包的最大容量為 j 在可選的物品中加入第 i 個物品後,揹包能裝入的物品的最大價值,val i j 值的選取方法如下 初始化第 0 ...
跳躍遊戲一(動態規劃)
給定乙個非負整數陣列,假定你的初始位置為陣列第乙個下標。陣列中的每個元素代表你在那個位置能夠跳躍的最大長度。請確認你是否能夠跳躍到陣列的最後乙個下標。例如 a 2,3,1,1,4 a 2,3 1,1 4 能夠跳躍到最後乙個下標,輸出true a 3,2,1,0,4 a 3,2 1,0 4 不能跳躍到...
面試準備(一) 動態規劃
動態規劃的思路說起來很簡單,但是新遇到乙個題目往往就會卡殼,甚至出現解不出來的情況。因此學習的過程中,有必要對面試準備中涉及到的動態規劃題目記錄,這裡只談思路,不涉及具體實現。通過分析不僅可以總結思路,更重要的是能從這些問題中找出動態規劃題目求解的共性,希望徹底搞定動態規劃!動態規劃常用來解決優化問...