首页 > 代码库 > 【bzoj1042】硬币购物
【bzoj1042】硬币购物
容斥
#include<bits/stdc++.h> #define N 100005 typedef long long ll; using namespace std; ll ans,f[N]; int c[10],d[10],T; void dfs(int x,int k,int sum){ if(sum<0)return; if(x==5){ if(k&1)ans-=f[sum]; else ans+=f[sum]; return ; } dfs(x+1,k+1,sum-(d[x]+1)*c[x]); dfs(x+1,k,sum); } inline int read(){ int f=1,x=0;char ch; do{ch=getchar();if(ch==‘-‘)f=-1;}while(ch<‘0‘||ch>‘9‘); do{x=x*10+ch-‘0‘;ch=getchar();}while(ch>=‘0‘&&ch<=‘9‘); return f*x; } int main(){ for(int i=1;i<=4;i++)c[i]=read(); T=read();f[0]=1; for(int i=1;i<=4;i++)for(int j=c[i];j<=100000;j++)f[j]+=f[j-c[i]]; while(T--){ for(int i=1;i<=4;i++)d[i]=read(); int x=read();ans=0; dfs(1,0,x); printf("%lld\n",ans); } return 0; }
【bzoj1042】硬币购物
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。