給時間t和工作集合n,有三種型別的集合:最少選乙個工作,最多選乙個工作,任選。問在t時間時完成工作的幸福度。
混合揹包問題,有點難,看了題解才慢慢理解。
用dp[i][j]表示在第i個集合,時間為j的最大幸福度。
1、至少選一項。
將dp[i][j]全部賦值負無窮,這樣就可以保證不會出現乙個都不選的情況。
dp[i][j]=max,dp[i][j]表示不選當前工作;dp[i-1][j-w[k]]+v[k]表示第一次選本組工作,由於初始值為負無窮,所以第一次一定可以去乙個工作;dp[i][j-w[k]]+v[k]表示選本組的工作,但不是第一次。
2、至多選一項。
最多選一項就是要麼選,要麼不選。
對於不選dp[i][j]=dp[i-1][j];對於選就是dp[i][j]=dp[i-1][j-w[k]]+v[k];
所以將dp[i][j]先賦值為dp[i-1][j]。
狀態轉移方程就是dp[i][j]=max。
3、任選
就是普通的01揹包問題。
先將dp[i][j]賦值為dp[i-1][j]。
狀態轉移方程為dp[i][j]=max
if(p==1)
if(p==2)
}int ans=
max(dp[n]
[t],-1
);cout<}return0;
}
題解 hdu3535 混合揹包
題目鏈結 思路摘抄自大佬部落格 首先如果存在最優解,我們可以互換不同工作集合的處理順序,依然能得到最優解.那麼我們下面只需要處理每個單獨的工作集合即可.令dp i j x表示處理完前i組工作集,所花時間 j時的快樂值為x。每得到一組工作就進行一次dp,所以dp i 為第i組的結果。下面對三種情況進行...
hdu 3535 AreYouBusy 混合揹包
題意 有三種任務,至少完成乙個,至多完成乙個,任意完成。現在給出k組任務,每組任務都屬於三種任務的一種。每個任務都會消耗時間,獲得幸福感。求時間t內的最大滿足感。三種揹包的混合。還是考察對揹包問題的理解。顯然一維已經滿足不了要求了,我們設d k j 代表第k組容量為j時獲得的最大滿足感。可以明顯比較...
HDU 3535 揹包綜合
題意 給3種揹包,一種是至少裝乙個,一種是最多裝乙個,一種任意。首先要對一維狀態的原始揹包很熟悉才可以。此處的i代表滾動的揹包型別。1.任意的話就是01揹包 初始化 dp i j dp i 1 j dp i j max dp i j w i 存在.2.最多裝乙個,就是比較替換。初始化 dp i j ...