動態規劃(DP)

2021-08-22 04:37:04 字數 801 閱讀 6443

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

如果我去模擬一下這個問題:每個物品都可以選擇或不選擇。假設我從第i個物品挑選總重量小於j的物品:

int rec(int i, int j)
rec(i + 1, j)表示不選擇第i個物品        rec(i + 1, j - wei[i]) + val[i]  表示選擇了第i個物品,所以要加上第i個物品的質量,然後進行比較,取使得質量最大的情況

遞迴呼叫的過程中會出現重複的現象,為了避免這一現象的發生,我們可以將返回的結果記錄下來,使得下一次不在去計算。

int n, w;

int wei[maxn], val[maxn];

int dp[maxn][maxn]; //用陣列去記錄,如果算過記為1,沒有算過記為0

int rec(int i, int j)

void solve()

int main()

}

將此**寫為遞迴方程 :dp[i][j] = 0;

dp[i][j] = dp[i + 1][j]     當j dp[i][j] = max(dp[i + 1][j], dp[i + 1][j - wei[i]] + val[i]);      當j>=wei[i];

寫為for迴圈:

for(int i = n-1; i >= 0; i--)

} printf("%d\n", dp[0][w]);

動態規劃 dp

威威貓系列故事 打地鼠 威威貓最近不務正業,每天沉迷於遊戲 打地鼠 每當朋友們勸他別太著迷遊戲,應該好好工作的時候,他總是說,我是威威貓,貓打老鼠就是我的工作!無話可說.我們知道,打地鼠是一款經典小遊戲,規則很簡單 每隔乙個時間段就會從地下冒出乙隻或多隻地鼠,玩遊戲的人要做的就是打地鼠。假設 1 每...

動態規劃,dp

線性動規區間動規樹形動規 區間動規 根據題目要求,全域性最優滿足區域性最優 典型題例 加分二叉樹 洛谷1040 題目介紹 題目描述 設乙個n 個節點的二叉樹t 的中序遍歷為 1,2,3,n 其中數字 1,2,3,n 為節點編號。每個節點都有乙個分數 均為正整數 記第j 個節點的分數為dj。二叉樹t ...

DP動態規劃

include include include include include include includeusing namespace std 動態規劃 利用子問題求解整個問題 關鍵 記錄子問題的解 列出狀態轉移方程 寫法 遞推 由邊界向上,最終得到目標問題的解 遞迴 由目標問題出發,向下遞迴...