練習題 No 5 揹包問題 動態規劃 記憶化搜尋

2021-07-28 09:03:02 字數 768 閱讀 1992

有n個揹包和價值分為wi

,vi 的物品。從這些物品中挑選出總重量不超過w的物品,求所有挑選方案中價值總和的最大值。

第一行輸入n

接下來n行的物品(w,v)

最後輸入一行w

輸出一行價值總和的最大值
4

2 31 2

3 42 2

5

7
利用函式引數一定,返回值一定,剪枝掉重複運算的部分。
#include

#include

#include

using

namespace

std;

int dp[1001][1001];

int n;

int w;

pair bag[1001];

int rec(int i, int j)

if (i == n) else

if (j < bag[i].first) else

dp[i][j] = r;

return r;

} int main()

cin >> w;

memset(dp, -1, sizeof(dp));

cout

<< rec(0, w);

return

0;}

動態規劃練習題 6(登山)

隊員們發現山上乙個有n個景點,並且決定按照順序來瀏覽這些景點,即每次所瀏覽景點的編號都要大於前乙個瀏覽景點的編號。同時隊員們還有另乙個登山習慣,就是不連續瀏覽海拔相同的兩個景點,並且一旦開始下山,就不再向上走了。隊員們希望在滿足上面條件的同時,盡可能多的瀏覽景點,你能幫他們找出最多可能瀏覽的景點數麼...

關於動態規劃的練習題

1.給出不同面額的硬幣以及乙個總金額.寫乙個方法來計算給出的總金額可以換取的最少的硬幣數量.如果已有硬幣的任意組合均無法與總金額面額相等,那麼返回 1。public static intdp int arr,int count 如果不能湊成額度,則返回 1 if cost count integer...

動態規劃 揹包問題

給定n個物品,重量是,價值是,包的容量 承重 是w 問,放入哪些物品能使得包內價值最大 1 需要將問題轉化為子問題,通過遞迴實現,且子問題必然與父問題存在關聯 2 定義v i,j 表示為,當item取自前i個items且揹包capacity j 時,揹包問題的最優解,也即最高的價值。3 從前i個it...