最近在刷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...