區間dp
例題:石子合併;
先使用a[i]初始化每個石子的價值
合併n個則需要先合併n-1個 子問題就是合併1~n個的最小值
則合併l長度個的最小值為合併左結點到右結點的最小值;
子問題為每個區間的合併最小值;
使用k列舉每個區間;
則有dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]+合併這兩段的和)
使用sum[i]初始化每段的價值;
for (int i=1;i<=n;i++)
sum[i]=sum[i]+a[i-1];
則有兩段合併的和為右側結點的sum減去左側結點的sum
即sum[j]-sum[i-1];
輸出dp[1][n]即可
#include#include#include#includeusing namespace std;
int n;
int a[1001],dp[1001][1001],sum[1001];
int main ()
} }cout<
動態規劃 金礦模型
問題描述 有people個人和 num個金礦,開採 每個金礦都需要i people個人,可以獲得i getgold個金子,並且用過的人不可以重複使用,問從這 num個金礦中最多可以得到多少個金子 輸入輸入第一行有兩個數,第乙個是用來開採金礦的總人數,第二個是總金礦數。輸入檔案的第2至n 1行每行有兩...
動態規劃 DAG模型
有n個矩形,每個矩形可以用a,b來描述,表示長和寬。矩形x a,b 可以巢狀在矩形y c,d 中當且僅當a c,b d或者b c,a d 相當於旋轉x90度 例 1,5 可以巢狀在 6,2 內,但不能巢狀在 3,4 中。你的任務是選出盡可能多的矩形排成一行,使得除最後乙個外,每乙個矩形都可以巢狀在下...
動態規劃 DAG模型
dag 有向無環圖 上的動態規劃是學習動態規劃的基礎。有n個矩形,每個矩形可以用a,b來描述,表示長和寬。矩形x a,b 可以巢狀在矩形y c,d 中當且僅當a c,b d或者b c,a d 相當於旋轉x90度 例 1,5 可以巢狀在 6,2 內,但不能巢狀在 3,4 中。你的任務是選出盡可能多的矩...