動態規劃的基礎模板

2021-07-15 19:52:45 字數 1145 閱讀 3200

首先是01揹包

for(int i=1;i

<=n;i++)

for(int j=v;j>=w[i];j--)

dp[j]=max(dp[j],dp[j-w[i]]+v[i]);

然後是完全揹包

for(int i=1;i

<=n;i++)

for(int j=w[i];j

<=v;j++)

dp[j]=max(dp[j],dp[j-w[i]]+v[i]);

多重揹包基礎版

for(int i=1;i

<=n;i++)

for(int j=v;j>=w[i];j--)

for(int k=1;k<=c[i];k++)

if(k*w[i]

<=j)dp[j]=max(dp[j],dp[j-k*w[i]]+k*v[i]);

多重揹包二進位制優化時間版

for(int i=1;i<=n;i++)

if(c[i])

}

注意二進位制拆分後剩餘部分不要忘記

二維費用揹包

for(int i=1;i

<=n;i++)

for(int j=w[i];j

<=v;j++)

for(int k=u[i];k<=w;k++)

dp[j]

[k]=max(dp[j]

[k],dp[j-w[i]][k-u[i]]+v[i]);

注意這是個完全揹包

然後是分組揹包,這個有點難

給個題目poj 3046 題解

模板是這樣子的

for 所有的組k 

forj=v..

0for 所有的i屬於組k

dp[j]=max(dp[j],dp[j-w[i]]+v[i]);

最後是樹形dp模板(要用到dfs)

void dfs(int x)

}

這幾天多做了幾個揹包問題,感覺自己還是對揹包的理解不太深,知識潛力能力太淺

後續如果我還有一些想法,我會繼續更新。

動態規劃基礎

to find the fastest way through a factory.這個問題我簡述下 乙個產品的出場要經過多道工序的加工方可出場。某工廠有兩條工作線,每條工作線都具有n道工序。並且對應位置的工序執行相同的操作,但是他們具有不同的時間代價。在同一條工作線當中,由當前工序轉移到下一道工序...

動態規劃(基礎)

1 揹包 2 最長上公升子串行 3 線性dp 區間dp 4 記錄結果再利用的動態規劃 5 狀態壓縮dp 1 2 3 hdu dp題集 1 揹包問題 1 演算法 01 揹包問題,畫 2 挑戰程式設計競賽 3 揹包九講 4 揹包九講 自學筆記 1 完全揹包自學筆記 題目一覽表 考察知識點 完成時間 a ...

模板 動態規劃 數字dp

includeusing namespace std define ll long long int a 20 ll dp 20 20 可能需要的狀態1 20 可能需要的狀態2 不同題目狀態不同 ll dfs int pos,int state1 可能需要的狀態1 int state2 可能需要的狀...