HDU 3535 揹包綜合

2021-06-26 22:03:00 字數 761 閱讀 9826

題意:給3種揹包,一種是至少裝乙個,一種是最多裝乙個,一種任意。

首先要對一維狀態的原始揹包很熟悉才可以。此處的i代表滾動的揹包型別。

1. 任意的話就是01揹包  初始化:dp[i][j]=dp[i-1][j].           dp[i][j]=max dp[i][j-w[i]] 存在.

2. 最多裝乙個,就是比較替換。初始化:dp[i][j]=dp[i-1][j].   dp[i][j]=max dp[i-1][j-w[i]] 存在

3. 至少裝乙個,先保證裝,要麼替換要麼裝入 初始化:dp[i][j]=-1.

if(dp[i][k-w]!=-1)       dp[i][k]=max(dp[i][k],dp[i][k-w]+v);//如果dp[i][k-w]存在,則表示i組已經取過了,就相當與在去過的基礎上再取,即,至少乙個

if(dp[i-1][k-w]!=-1)        dp[i][k]=max(dp[i-1][k-w]+v,dp[i][k]);//保證一定取乙個

#include#includeint dp[110][110];

int max(int a,int b)

int main()}}

if(s==1)//至多選乙個}}

if(s==2)//隨意選}}

} int ans=-1;

for(i=0;i<=t;i++)

printf("%d\n",ans);

} return 0;

}

hdu 3535 揹包綜合題)

一道需要深刻理解狀態轉移的揹包題 dp i j 表示第i組,時間剩餘為j時的快樂值。每得到一組工作就進行一次dp,所以dp i 為第i組的結果。1 至少選一項,即必須要選,那麼在開始時,對於這一組的dp的初值,應該全部賦為負無窮,這樣才能保證不會出現都不選的情況。狀態轉移方程為dp i k max。...

題解 hdu3535 混合揹包

題目鏈結 思路摘抄自大佬部落格 首先如果存在最優解,我們可以互換不同工作集合的處理順序,依然能得到最優解.那麼我們下面只需要處理每個單獨的工作集合即可.令dp i j x表示處理完前i組工作集,所花時間 j時的快樂值為x。每得到一組工作就進行一次dp,所以dp i 為第i組的結果。下面對三種情況進行...

HDU3535 分組揹包

定義dp i j 為考慮到第i組,揹包容量為j時的最大價值 s 0,至少選乙個。那麼dp i 初始化為 inf。dp i k 要從dp i k weight val和dp i 1 k weight val轉移過來。所以dp i k max dp i k max dp i k weight val,d...