記憶化搜尋解決揹包問題

2021-10-06 05:58:28 字數 688 閱讀 6739

為什麼要用二維陣列進行紀錄?

記憶化最麻煩的還是記憶值的準確性

#include

#include

using

namespace std;

struct noded[

10000];

long

long n,m;

long

long dp[

1000][

1000];

/*一開始我直接使用的dp[1000000],以為將每個m對應的最優解存下就行了,但是不行,每個i對應的m都有意義。

並且對於dp[m]一開始儲存的值不一定是最優解。

舉例:當 m=10時

0 1 6 8 為最優解

但是dp[m]一開始並不一定是賦值這個,一開始dp[m]被賦值為第一次m=10時對應的dp[i][m]的最優解

因此如果使用該dp[m]進行更新其餘值,只會一錯再錯。

*/long

long

solve

(int m,

int i)

return dp[i]

[m];

}int

main()

solve

(m,0);

cout<[m];

return0;

}

深度優先搜尋解決簡單揹包問題(遞迴)

hh還是 演算法筆記 中的專題,在271頁。問題 有n件物品已知每件的重量w i 價值c i 現在需要選出若干物品放入乙個容積為v的揹包中,使得選入揹包的物品重量和不超過v的前提下,讓揹包中的物品價值和最大,求最大價值 1 n 20 這裡採用的思想是深度優先搜尋,實現方法是遞迴法。遞迴式是對每個物品...

3336記憶化搜尋解題報告

起初也不知道這個題目還有乙個更為簡單易想的辦法,那就是記憶化的搜尋。因為題目的基本意思就是要你匹配給你字串的所有長度的字首在字串當中所出現的次數,那麼這個時候我們可以設計乙個簡便的記憶方法。設定乙個place來記錄每次新的字首長度所匹配的位置資訊。例如 ababab這個字串 我們可以首先讓這個pla...

P11 揹包問題的搜尋解法

對於01揹包問題,簡單的深搜的複雜度是o 2 n 就是列舉出所有2 n種將物品放入揹包的方案,然後找最優解。基本框架如下 procedure searchpack i,cur v,cur w if i n if cur w best best cur wreturnif cur v v i v se...