[BZOJ 1042][HAOI2008]硬币购物:容斥原理
2017-05-31 11:48
441 查看
点击这里查看原题
f[i]表示在不考虑硬币数量的情况下,达到i元的方案数。
于是进行容斥,答案=所有方案数-有一种硬币超出限制(即使用d[i]+1枚硬币)+有两种超出限制-有三种超出限制+有四种超出限制
f[i]表示在不考虑硬币数量的情况下,达到i元的方案数。
于是进行容斥,答案=所有方案数-有一种硬币超出限制(即使用d[i]+1枚硬币)+有两种超出限制-有三种超出限制+有四种超出限制
/* User:Small Language:C++ Problem No.:1042 */ #include<bits/stdc++.h> #define ll long long #define inf 999999999 using namespace std; const int M=1e5+5; int c[5],d[5],s; ll f[M],ans; void dfs(int now,int sum,int cnt){ if(now==5){ if(s-sum<0) return; if(cnt&1) ans-=f[s-sum]; else ans+=f[s-sum]; return; } dfs(now+1,sum+(d[now]+1)*c[now],cnt+1); dfs(now+1,sum,cnt); } void solve(){ ans=0; for(int i=1;i<=4;i++) scanf("%d",&d[i]); scanf("%d",&s); dfs(1,0,0); printf("%lld\n",ans); } int main(){ freopen("data.in","r",stdin);// for(int i=1;i<=4;i++) scanf("%d",&c[i]); f[0]=1; for(int i=1;i<=4;i++) for(int j=c[i];j<=1e5;j++) f[j]+=f[j-c[i]]; int t; scanf("%d",&t); while(t--) solve(); return 0; }
相关文章推荐
- bzoj 1042: [HAOI2008]硬币购物(容斥原理)
- [bzoj1042][HAOI2008]硬币购物 容斥原理
- BZOJ-1042 [HAOI2008]硬币购物 容斥原理 +01背包方案数
- bzoj1042 HAOI2008 硬币购物 容斥原理
- 【BZOJ1042】[HAOI2008]硬币购物【计数DP】【容斥原理】
- [bzoj 1042][HAOI2008]硬币购物(用容斥原理弄背包)
- BZOJ 1042: [HAOI2008]硬币购物( 背包dp + 容斥原理 )
- BZOJ 1042 HAOI2008 硬币购物 背包+容斥原理
- [BZOJ 1042][HAOI 2008]硬币购物(背包+容斥原理)
- BZOJ 1042:[HAOI2008]硬币购物 容斥原理 背包dp
- [容斥原理]Bzoj1042 硬币购物[HAOI2008]
- bzoj1042: [HAOI2008]硬币购物 容斥原理
- 【bzoj1042】 HAOI2008硬币购物 容斥原理+背包dp
- BZOJ_1042_[HAOI2008]硬币购物_容斥原理+背包
- BZOJ 1042: [HAOI2008]硬币购物 [容斥原理]
- Bzoj 1042: [HAOI2008]硬币购物 容斥原理,动态规划,背包dp
- BZOJ 1042 [HAOI2008]硬币购物 容斥原理
- BZOJ 1042: [HAOI2008]硬币购物(容斥原理)
- [BZOJ1042]HAOI2008硬币购物|DP|容斥原理
- BZOJ 1042 HAOI 2008 硬币购物 容斥原理