description基本思路:先預處理出來沒有限制時的方案數(完全揹包),然後利用容斥原理an硬幣購物一共有4種硬幣。面值分別為c1,c2,c3,c4。某人去商店買東西,去了tot次。每次帶di枚ci硬幣,買si的價值的東西。請問每次有多少種付款方法。
input
第一行 c1,c2,c3,c4,tot
下面tot行 d1,d2,d3,d4,s
output
每次的方法數
sample input
1 2 5 10 2
3 2 3 1 10
1000 2 2 2 900
sample output
4 27
hint
資料規模
di,s<=100000
tot<=1000
source
s=價值為
s 時的方案數(超過限制)−∑
(一種硬幣超過限制)+∑
(兩種硬幣超過限制)−∑
(三種硬幣超過限制)+
∑ (四種硬幣超過限制)。
這裡可以用位運算(共24
種)來列舉所有方案。
(注意:一定要開lo
nglo
ng)
#include
#include
#include
using
namespace
std;
const
int s=100010;
long
long f[s];
int c[10],d[10],s,tot;
void in(int &x)
while((t>=48)and(t<=57))
x*=f;
}void work()
int main()
if (x>=0)
if (num&1) ans-=f[x];
else ans+=f[x];
}printf("%lld\n",ans);
--tot;
}return
0;}
bzoj1042 HAOI2008 硬幣購物
time limit 10 sec memory limit 162 mb submit 1835 solved 1074 submit status discuss 硬幣購物一共有4種硬幣。面值分別為c1,c2,c3,c4。某人去商店買東西,去了tot次。每次帶di枚ci硬幣,買s i的價值的東西...
bzoj1042 HAOI2008 硬幣購物
description 硬幣購物一共有4種硬幣。面值分別為c1,c2,c3,c4。某人去商店買東西,去了tot次。每次帶di枚ci硬幣,買s i的價值的東西。請問每次有多少種付款方法。input 第一行 c1,c2,c3,c4,tot 下面tot行 d1,d2,d3,d4,s,其中di,s 1000...
BZOJ1042 HAOI2008 硬幣購物
硬幣購物一共有4種硬幣。面值分別為c1,c2,c3,c4。某人去商店買東西,去了tot次。每次帶di枚ci硬幣,買s i的價值的東西。請問每次有多少種付款方法。第一行 c1,c2,c3,c4,tot 下面tot行 d1,d2,d3,d4,s,其中di,s 100000,tot 1000 每次的方法數...