JZOJ1517 揹包問題

2022-01-10 21:47:43 字數 812 閱讀 5720

這個題,乍一看感覺挺神的(其實真挺神的),其實是個簡單的分組揹包(如果恍然大悟就不用接著看了)

取連續的一段是這道題最難以處理的地方,但是觀察到物品數量不多<=100(如果恍然大悟就不用接著看了)

不妨把連續取物轉化為單個物品,就是說,我們取一段連續物品求和作為乙個物品,這樣,我們只要滿足每組選乙個(或不選),

然後這道題就轉化為了乙個簡單的分組揹包問題,我們只要通過可行性dp解決就好

#include#include

using

namespace

std;

int v,t,a[20][10010],tmp[110

];bool exi[5010

];int

main()

for(int j=1;j<=num;j++)

for(int k=j;k<=num;k++)

a[i][++a[i][0]]=tmp[k]-tmp[j-1

]; }

exi[

0]=1

;

for(int k=1;k<=t;k++)

for(int j=v;j;j--)

for(int tmp,i=1;i<=a[k][0];i++)

if((tmp=a[k][i])<=j)

exi[j]|=exi[j-tmp];

int ans=v;

while(!exi[ans])

ans--;

printf(

"%d\n

",v-ans);

return0;

}

jzoj P1517 揹包問題

題目大意 從t組物品中選出一些物品,放入揹包中,總空間為v,求裝了物品後,剩餘空間的最小值。限制條件 從每組物品中挑選物品必須要選取連續的一段。就是說,如果這組物品共有n個 物品1 物品2 物品3 物品n,那麼只能選取物品i 物品i 1 物品j,其中1 i j n,或者不選。60 的資料滿足 1 n...

JZOJ4916 完全揹包問題

給定 n 種物品,每種物品有無限個,體積是vi 現在有 m 個詢問,每個詢問給乙個揹包容量wi 詢問是否能用給定的物品恰好裝滿wi 要求使用的vi l的個數不超過 c 個。data constraint n 50,m 100000,v i 10000 假如存在最小的vi l 記為vm in 且存在 ...

Jzoj3223 Ede的新揹包問題

題意 多重揹包,每次對於第i個物品不能選的情況求最大獲益,n,m 1000,q 30000 最簡單的方法肯定是暴力,每次詢問都做一次揹包,顯然這樣會超時 我們可以用二進位制分拆法或者是用單調佇列優化複雜度到o qnm 可是依然不能過 注意到每次不能取的部分只有乙個,那我們考慮用字首和字尾分別維護,最...