20170801 動態規劃之國王和金礦

2021-08-04 17:35:23 字數 1639 閱讀 7983

20170801_動態規劃之國王和金礦

題目: 國王和金礦

有乙個國家發現了5座金礦,每座金礦的**儲量不同,需要參與挖掘的工人數也不同。

參與挖礦工人的總數是10人。

每座金礦要麼全挖,要麼不挖,不能派出一半人挖取一半金礦。

要求用程式求解出,要想得到盡可能多的**,應該選擇挖取哪幾座金礦?

1、400金/5人   2、500金/5人   3、200金/3人    4、300金/4人    5、350金/3人

動態規劃問題:maxgold[w]

n:表示金礦的數量

w:表示工人的數量

g[n]:表示每座金礦的金磚量

p[n]:表示採取每座金礦需要的工人數量

狀態和狀態轉移方程:

1、首先設計乙個** maxgold[w+1]

2、初始化:當只有第 1 個金礦時,工人數量 i 從 1 開始增加到 w 時,maxgold[i] 表示所能得到的最大金磚。

3、當只有第 1 個和第 2 個金礦時,工人數量 i 也同樣從 1 開始增加到 w 時,

maxgold[i](已經根據狀態轉移方程進行修改了)表示所能得到的最大金磚。

4、依次類推,當只有第 1 個、第 2 個、第 3 個、第 4 個、第 5 個金礦時,工人數量i也同樣從 1 開始增加到 w 時,

maxgold[i](已經根據狀態轉移方程進行修改了)表示所能得到的最大金磚。

5、時間複雜度:o( n * w )

空間複雜度:o( w )

//國王與金礦

/*題目一:上樓梯有多少種走法

題目二: 國王和金礦

有乙個國家發現了5座金礦,每座金礦的**儲量不同,需要參與挖掘的工人數也不同。

參與挖礦工人的總數是10人。

每座金礦要麼全挖,要麼不挖,不能派出一半人挖取一半金礦。

要求用程式求解出,要想得到盡可能多的**,應該選擇挖取哪幾座金礦?

1、400金/5人 2、500金/5人 3、200金/3人 4、300金/4人 5、350金/3人

*/#include#include#includeusing namespace std;

/*動態規劃問題:maxgold[w]

1、首先設計乙個**maxgold[w+1]

2、初始化:當只有第1個金礦時,工人數量i從1開始增加到w時,maxgold[i]表示所能得到的最大金磚。

3、當只有第1個和第2個金礦時,工人數量i也同樣從1開始增加到w時,

maxgold[i](已經根據狀態轉移方程進行修改了)表示所能得到的最大金磚。

4、依次類推,當只有第1個、第2個、第3個、第4個、第5個金礦時,工人數量i也同樣從1開始增加到w時,

maxgold[i](已經根據狀態轉移方程進行修改了)表示所能得到的最大金磚。

5、時間複雜度:o( n * w )

空間複雜度:o( w )

*/int getmaxgold(int n, int w, const vector&g, const vector&p)

; vectorp(begin(p),end(p)); //每座金礦需要的人數

int maxgold=getmaxgold(n,w,g,p);

cout<

動態規劃 國王與金礦

題目 有乙個國家發現了5座金礦,每座金礦的 儲量不同,需要參與挖掘的工人數也不同。參與挖礦工人的總數是10人。每座金礦要麼全挖,要麼不挖,不能派出一半人挖取一半金礦。要求用程式求解出,要想得到盡可能多的 應該選擇挖取哪幾座金礦?遞迴實現public static void main string a...

國王與金礦 動態規劃

參照大神的思路,原文在此 思路與上文是一樣的,主要是做一些的改進 主要是空間複雜度 題目 有乙個國家發現了5座金礦,每座金礦的 儲量不同,需要參與挖掘的工人數也不同。參與挖礦工人的總數是10人。每座金礦要麼全挖,要麼不挖,不能派出一半人挖取一半金礦。要求用程式求解出,要想得到盡可能多的 應該選擇挖取...

動態規劃 什麼是動態規劃?

先來看看 資訊學奧賽一本通第5版 是怎麼說的 動態規劃程式設計是對解最優化問題的一種途徑 一種方法,而不是一種特殊演算法。不像前面所述的那些搜尋或數值計算那樣,具有乙個標準的數學表示式和明確清晰的解題方法。動態規劃程式設計往往是針對一種最優化問題,由於各種問題的性質不同,確定最優解的條件也互不相同,...