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