BZOJ 1042 硬幣購物

2022-05-12 16:31:57 字數 486 閱讀 1684

dp+容斥原理。。。

我們先預處理出無限制(無限)揹包的情況

然後answer就是全部無限制的情況總數減去某個物品超過限制的情況總數。

設0000為全部無限制的情況,0101為c2,c4超過限制(其餘無限制)的情況總數,其他的同理。

則answer=0000-0001-0010-0100-1000-1100-1010-1001-0110-0101-0011-1110-1101-1011-0111-1111

但是,我們會發現,0001的情況包括了1001,0101,0011,1101,1011,0111,1111的情況,所以到最後會導致某一種情況被重複減去。

於是我們就得用到容斥原理了。

最後可得:

answer=全部無限制情況-奇數個超過限制情況(奇數個1的情況)+偶數個超過限制

情況(偶數個1的情況)

p.s:價值為s且c1的數量大於d1的情況總數為w[s-(d1+1)*c1]

【code】

BZOJ 1042 硬幣購物

1042 haoi2008 硬幣購物 time limit 10 sec memory limit 162 mb description 硬幣購物一共有4種硬幣。面值分別為c1,c2,c3,c4。某人去商店買東西,去了tot次。每次帶di枚ci硬幣,買s i的價值的東西。請問每次有多少種付款方法。i...

BZOJ 1042 硬幣購物 (數論 容斥)

time limit 10 sec memory limit 162 mb description 硬幣購物一共有4種硬幣。面值分別為c1,c2,c3,c4。某人去商店買東西,去了tot次。每次帶di枚ci硬幣,買s i的價值的東西。請問每次有多少種付款方法。input 第一行 c1,c2,c3,c...

BZOJ 1042 硬幣購物 HAOI2008

失蹤oj回歸。小c通過這道題mark一下容斥一類的問題。硬幣購物一共有4種硬幣。面值分別為c1,c2,c3,c4。某人去商店買東西,去了tot次。每次帶di枚ci硬幣,買s的價值的東西。請問每次有多少種付款方法。第一行 c1,c2,c3,c4,tot 下面tot行 d1,d2,d3,d4,s。每次的...