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。每次的...