一家公司購買長鋼條,將其切割成短鋼條**,切割本身沒有成本,長度為i的短鋼條的**為pi。那給定一段長度為n的鋼條和乙個**表pi,求鋼條的切割方案使得收益rn最大。如乙個pi如下:
1.資料結構表示dag,我們可以把它想象成dag,每個長度想象成乙個點,i>j 則i可以指向j,代價為上圖(i-j)對應數值,結果就是求最長路徑。
2.問題小化
,即求出前面節點的最長路徑,就可以求出n點的最長路徑了,詳見之前我的另一文章.
3.資料結構表示
,我們用dp[i] 來儲存i的最大收益值,last[i]儲存i節點切割的最後一次長度。
4.**實現,演算法複雜度o(n^2),不知道有沒有什麼更快的演算法,求大神解讀
#include int map[10000][10000];
int dp[10000];
int last[10000];
int main()
} for (int i = 1; i <= n; i++)
}} printf("%d\n", dp[n]);
} 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 從第一行的數開始,每次可以往下或往右下走一格,直到走到最下行,把沿途...