簡單線性dp:
反覆利用前態推出後態
上公升子串行:
for
(int i=
1;i<=n;i++
)dp[i]
=a[i]
;for
(int j=
1;j(a[i]
>a[j]
) dp[i]
=max
(dp[i]
,dp[j]+1
)
01揹包:
從後往前遍歷
for
(int i=
1;i<=type;i++
)for
(int j=weight;j>=w[i]
;j--
) dp[j]
=max
(dp[j]
,dp[j-w[i]
]+val[i]
完全揹包:
從前往後遍歷
for
(int i=
1;i<=type;i++
)for
(int j=w[i]
;j<=weight;j++
) dp[j]
=max
(dp[j]
,dp[j-w[i]
]+val[i]
多重揹包:
二進位制拆分 + 01揹包
for(int j=
1;j<=num;j<<=1)
if(num>0)
泛揹包:
從右上開始遍歷
hdu1712
for
(int i=
1;i<=n;i++
)//種類
for(
int j=m;j>=
1;j--
)//剩餘容量
for(
int k=
1;k<=j;k++
)//在第i種上花費容量k
dp[j]
=max
(dp[j]
,dp[j-k]
+a[i]
[k])
;
分組揹包:
①每組最少拿乙個
hdu3033
int n,m;
//n組,容量m
for(
int i=
1;i<=n;i++)
③多種多組揹包的組合
hdu3535
記憶化搜尋:
power oj2842
dfs+dp陣列進行記憶
清華集訓2014 簡單迴路 插頭DP
鏈結 直接做q qq次插頭dp得分為60 6060 考慮題目中只詢問了豎直的邊,所以考慮分別做一遍前字尾插頭dp,記錄下每一行的每種輪廓線對應的方案數,詢問時合併輪廓線。兩條輪廓線互補相當於把輪廓線上的邊連起來能形成乙個環,用並查集判就行了。include using namespace std t...
最大全1正方形(簡單dp)
描述 飛哥最近 得到 了一大塊 n m 的土地 他想在這塊土地 上建乙個正方 形的農場 但是 這塊土 地有些地方 被大石頭 佔著,無法 使用 於是 飛哥想來問你 在這塊土地 上能建成的農場 的最大 邊 長為多少 輸入第乙個數t表示陣列組數 每組 資料 一開 始有兩個 整數 n和 m,表示 土地 的長...
動態規劃專題 1 簡單線性DP
本專題文章建立在本人多年寫動態規劃 的經驗上,用以自己回顧總結,也幫助朋友初步理解,部分理解可能和教科書有所出入,要參加演算法考試的同學請以教科書為準。在現實生活中,有一類活動的過程,由於它的特殊性,可將過程分成若干個互相聯絡的階段,在它的每一階段都需要作出決策,從而使整個過程達到最好的活動效果。因...