學習參考:
就是倒推——尋找遞推式(難點)——然後用陣列將資料計算出來——最後直接呼叫得到答案
01揹包問題:
for
(i=0
;i)}
例題一:
洛谷oj——開心的金明
**:
#include
#include
using namespace std;
const
int max=
100001
;long
long dp[max]=;
int m=0;
int n=0;
long
long w[max]=;
//一定要注意陣列要初始化,而且這樣的long long陣列要全域性定義
long
long v[max]=;
intmain()
for(i=
0;icout<
}
例題二:
洛谷oj——小a點菜
參考題解:
#include
using namespace std;
const
int max=
1001
;int a[max]=;
int f[max]=;
//f陣列表示花費錢的方案數
intmain()
f[0]
=1;//注意這裡的f[0]=1一定要賦值,表示不花費錢的為一種方案
for(
int i=
1;i<=n;i++)}
cout<;return0;
}
例題三:
洛谷oj——金明的預算
**:參考:
例題四:
洛谷oj——採藥
#include
#include
using namespace std;
const
int max=
100001
;long
long dp[max]=;
int m=0;
int n=0;
long
long w[max]=;
long
long v[max]=;
intmain()
for(i=
0;icout<
}
例題六:
洛谷oj——裝箱問題
注意:就是輸出那裡只要改變一點點就好了,改為m-dp[m] 就是答案
//m-dp[m] 就是答案
#include
#include
using namespace std;
const
int max=
100001
;long
long dp[max]=;
int m=0;
int n=0;
long
long w[max]=;
long
long v[max]=;
intmain()
for(i=
0;icout<
}
例題六:
洛谷oj——瘋狂的採藥
#include
#include
using namespace std;
const
int max=
100001
;long
long dp[max]=;
int m=0;
int n=0;
long
long w[max]=;
long
long v[max]=;
intmain()
for(i=
0;i} cout<
}
正確**:
#include
#include
using namespace std;
const
int max=
100001
;long
long dp[max]=;
int m=0;
int n=0;
long
long w[max]=;
long
long v[max]=;
intmain()
for(i=
0;icout<
}
《動態規劃》 ACM 動態規劃例題詳解
描述 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 圖1 圖1給出了乙個數字三角形。從三角形的頂部到底部有很多條不同的路徑。對於每條路徑,把路徑上面的數加起來可以得到乙個和,你的任務就是找到最大的和。注意 路徑上的每一步只能從乙個數走到下一層上和它最近的左邊的那個數或者右邊的那個數。輸...
ACM 動態規劃筆記
2.解決動態規劃問題,要先找出動態轉移方程來,動態轉移方程怎麼找呢?首先得定好,用哪幾個因子,可以明確的表示好乙個狀態,然後,再通過樣例或者特例或者硬想,找出子問題和父問題的關係,或者說,子問題怎麼push,可以影響到父問題?我感覺可以放開思路想,放心大膽的想,假設你不會動態規劃,讓你暴力搜尋,你會...
ACM 動態規劃 Palindrome
題目大意 給乙個長為n的字串,問最少插入幾個字元成回文串 解題思路 總長 最長公共 原來的和其倒過來的串 子串行 lcs 知識詳解 lcs 給出兩個子串行a,b,求長度最大的公共子串行 如152687和2356984 568或268 不妨設d i,j 為a,b的lcs,則最有子結構為 a i b j...