演算法之一動態規劃

2021-07-28 08:52:24 字數 791 閱讀 8407

問題描述:

給定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 不能跳躍到...

面試準備(一) 動態規劃

動態規劃的思路說起來很簡單,但是新遇到乙個題目往往就會卡殼,甚至出現解不出來的情況。因此學習的過程中,有必要對面試準備中涉及到的動態規劃題目記錄,這裡只談思路,不涉及具體實現。通過分析不僅可以總結思路,更重要的是能從這些問題中找出動態規劃題目求解的共性,希望徹底搞定動態規劃!動態規劃常用來解決優化問...