(混合揹包)HDU3535AreYouBusy

2021-10-01 23:35:27 字數 690 閱讀 5495

給時間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 ...