AreYouBusy (混合揹包)

2022-04-16 21:16:11 字數 1148 閱讀 5294

題目大意:有 n 組任務,m 個體力,每組任務有 k 個,分類為 f,每個任務花費 x 體力,得到 y 開心值,求最大開心值,若不能完成輸出-1

分類為 0:這一組中的 k 個任務至少選擇乙個。

分類為 1:這一組中的 k 個任務最多選擇乙個。

分類為 2:這一組中的 k 個任務隨便選擇。

解法:對於 0 : 其實就是之前做過的分組揹包的變形每組至少選乙個

對於 1 : 其實就是分組揹包

對於 2 : 其實就是 01揹包

.對於分類 0,若當前判斷到乙個任務 x,則有兩種情況:

1)它是該組第乙個被選擇的任務,則它更新的狀態只能是將上一層的狀態轉移更新到當前位置。

2)它不是第乙個被選擇的任務,則它可以由當前組的狀態轉移更新到當前位置。

為了方便判斷處理第乙個任務,初始化當前層為 -inf

2.對於分類 1,因為只能選乙個或者不選,則它只能由上一層狀態轉移更新

3.對於分類 2,就是普通的 01揹包問題

#include #include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define ll long long

#define inf 0x3f3f3f3f

#define ls nod<<1

#define rs (nod<<1)+1

using

namespace

std;

int dp[250][250

];int w[250],v[250

];int

n,m,k,vv;

intmain()

}else

if(vv==1

)

else}}

int temp=max(dp[n][m],-1

); printf(

"%d\n

",temp);

}return0;

}

hdu 3535 AreYouBusy 混合揹包

題意 有三種任務,至少完成乙個,至多完成乙個,任意完成。現在給出k組任務,每組任務都屬於三種任務的一種。每個任務都會消耗時間,獲得幸福感。求時間t內的最大滿足感。三種揹包的混合。還是考察對揹包問題的理解。顯然一維已經滿足不了要求了,我們設d k j 代表第k組容量為j時獲得的最大滿足感。可以明顯比較...

混合揹包 分組揹包

啥是混合揹包呢,就是包含01揹包,完全揹包,多重揹包。有n件物品,揹包承重最大為m,w i 代表重量,v i 代表價值,s i 代表種類。s i 1,可用1次,s i 0,可用無限次,s i 0,可用s i 次.解法 見 const int maxn 1e4 5 int n,m,dp m 1 w n...

混合揹包問題

如果將p01 p02 p03混合起來。也就是說,有的物品只可以取一次 01揹包 有的物品可以取無限次 完全揹包 有的物品可以取的次數有乙個上限 多重揹包 應該怎麼求解呢?考慮到在p01和p02中給出的偽 只有一處不同,故如果只有兩類物品 一類物品只能取一次,另一類物品可以取無限次,那麼只需在對每個物...