關於動態規劃0 1揹包的演算法

2021-09-30 13:43:55 字數 755 閱讀 7716

最近在刷oj的時候發現有個高逼格的解決方法,特留下筆記:

題目如下:

該陣列從第1行到第m行(1<=j<=m)中給出了編號為j的物品的基本資料,每行有2個非負整數,

表示該物品的**(<=10000)和該物品的重要度(1~5)。

getresult表示不超過總錢數的物品的**與重要度乘積的總和的最大值(<100000000)。

不需做入參檢查,測試用例可以保證~

例如:4000 8(第0行)第一行為總錢數和要買的物品數量

821 3 (第1行)

422 5

458 5

500 3

200 2

430 4

530 3

239 3

則表示 總錢數為4000,希望購買物品個數為8個,因此從第1行到第8行表示編號為j的物品的**及物品的重要度。

void getresult(int*p,int& get_result)

;for(i = 1;i <= num;i++)

{value = p[2*i];

level = p[2*i+1];

for(j = money; j>=value ;j--)

count[j] = (count[j-value] + value*level) > count[j] ? (count[j-value]+value*level) : count[j];

get_result = count[money];

陣列的最後一位永遠是最大值

演算法之動態規劃 0 1揹包

經典的盜賊問題 乙個盜賊帶著乙個揹包去偷東西,房中有五件物品 1 6公斤 48元 2 5公斤 40元 3 2公斤 12元 4 1公斤 8元 5 1公斤 7元 但是他的揹包只能裝下8攻擊的東西 問他該怎樣選擇保障拿到的東西價值最大。思路 使用動態規劃來實現,1.將物品i 放到揹包裡面,修改選擇標誌 2...

演算法 動態規劃0 1揹包問題

有乙個容量為 n 的揹包,要用這個揹包裝下物品的價值最大,這些物品有兩個屬性 體積 w 和價值 v。定義乙個二維陣列 dp 儲存最大價值,其中 dp i j 表示前 i 件物品體積不超過 j 的情況下能達到的最大價值。設第 i 件物品體積為 w,價值為 v,根據第 i 件物品是否新增到揹包中,可以分...

動態規劃 01揹包

最優二叉查詢樹.cpp 定義控制台應用程式的入口點。01揹包問題。include stdafx.h include include define n 3 the number of real node define m 10 using namespace std int tmain int arg...