動態規劃入門

2021-08-28 02:31:40 字數 1503 閱讀 2631

問題描述:

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

挑選方案中價值總和的最大值。

限制條件:

1 <= n <= 100

1 <= wi, vi <= 100

1 <= maxvalue <= 10000

輸入:

4

2 3

1 2

3 4

2 2

5

輸出

7

#include 

#include

#define maxn 100

using

namespace

std;

int n, maxweigh;

int w[maxn+1], v[maxn+1];

int rec( int i, int j ) // 從第i個物品挑選總重小於j的部分

else

if( j // 無法挑選這個物品

res = rec( i+1, j );

}else

return res;

}int main()

記憶搜尋法

#include 

#include

#include

#define maxn 100

using

namespace

std;

int n, maxweigh;

int w[maxn+1], v[maxn+1];

int dp[maxn+1][maxn+1]; //記憶陣列

int rec( int i, int j ) // 從第i個物品挑選總重小於j的部分

else

if( j // 無法挑選這個物品

res = rec( i+1, j );

}else

/* 注意這裡的 j 不是連續變化的 */

return dp[i][j] = res; // 遞迴的過程中每個狀態的返回值都會記錄下來

}int main()

遞推式法

#include 

#define maxn 100

using

namespace

std;

int n, maxvalue;

int w[maxn+1], v[maxn+1];

int dp[maxn+1][maxn+1];

int main()

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

return

0;}

**

動態規劃入門

1 用 dp 做的題大多數返回值是int boolean,求max min,不能打亂原來輸入順序。2 動態規劃有兩個重要定義,乙個叫 optimal substructure 另乙個叫 overlap subproblem 各種排序 tree 類問題中,都會用到 divide conquer 的思想...

動態規劃入門

大家可以看看這篇文章dp,哪個更容易理解就看哪個!一 動態規劃的定義 動態規劃程式設計是一種針對於解決最優化問題的一種途徑 一種方法,而不是一種特殊演算法,也就是說它沒有固定的模板。在動態規劃中,每走一步都要看看能不能最優,而且動態規劃最擅長的就是多階段問題!二 動態規劃的基本概和基本模型構成 1....

動態規劃入門

學動態規劃自然要從數字三角形開始起步,那麼我們就先從數字三角形開始。數字三角形題目 有乙個由非負整數組成的三角形,第一行只有乙個數,除了最下行之外的每個數的左下方和右下方各有乙個數,如下圖所示 3 24 10 1 4 3 2 20 從第一行的數開始,每次可以往下或往右下走一格,直到走到最下行,把沿途...