BZOJ_1042_[HAOI2008]硬币购物_容斥原理+背包 题意: 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买s i的价值的东西.请问每次有多少种付款方法. 分析: 假设没有di的限制,先跑一遍完全背包 容斥,用总方案数减去有一种硬币数目不合法的方案数加上有两种硬币不合法的方案数...... 怎么求这个方案数呢? 我们发现如果第i种硬币数目不合法,那它一定拿了至少(di+1)个,方案数就是f[n-(di+1)*ci]…
题目链接 1042: [HAOI2008]硬币购物 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1706  Solved: 985[Submit][Status][Discuss] Description 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买si的价值的东西.请问每次有多少种付款方法. Input 第一行 c1,c2,c3,c4,tot 下面tot行 d1,d2,d3…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1042 [题目大意] 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4. 某人去商店买东西,去了tot次.每次带di枚ci硬币, 买si的价值的东西.请问每次有多少种付款方法. [题解] 我们首先预处理出没有限制情况下不同容量的方案数,等价于一般的背包问题 之后对于硬币数量限制问题考虑容斥, 方案数等于无限制方案数-面值为c1的硬币超出限制的方案数-面值为c2的硬币超出限制的方…
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1042 dp预处理+容斥原理. 先预处理求出无限制的各面值的组成方案数 f (完全背包). 求s [ i ]有限制的,就是s [ i ]无限制方案数 - 单种硬币一定超过限制的方案数 + 两种的 - 三种的 + 四种的. 第 k 中硬币一定超过限制的方案数就是f [ s [ i ] - c [ k ] * ( d [ k ] + 1 ) ],即确定用了 d + 1 个该硬币,刨去它们后的无限制…
http://www.lydsy.com/JudgeOnline/problem.php?id=1042 题意: 思路: 如果不考虑硬币个数的话,这就是一道完全背包的题目. 直接求的话行不通,于是这里要用容斥原理来做. 简单来说,ans=一种没超-一种硬币超+两种硬币超-三种硬币超+四种硬币超. /************************************************************** Problem: 1042 User: Vortex Language:…
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1042 递推,再用容斥原理减掉多余的,加上多减的……(dfs)即可. 代码如下: #include<iostream> #include<cstdio> #include<cstring> using namespace std; typedef long long ll; ll c[],tot,d[],s,f[]; void dfs(ll x,ll y,ll z)/…
考虑如果没有个数的限制,那么就是一个完全背包,所以先跑一个完全背包,求出没有个数限制的方案数即可. 因为有个数的限制,所以容斥一下:没有1个超过限制的方案=至少0个超过限制-至少1个超过限制+至少2个超过限制-至少3个超过限制+至少4个超过限制 如何求上面的方案数?有限制时,把$c[i]$这个硬币取了超过$d[i]$次是不应该有贡献的,那么我们先取出$d[i]+1$个价值为$c[i]$的硬币,然后剩下的就是$f[sum-c[i]*(d[i]+1)]$,这就是我们所不需要的答案, 把它按容斥的思路…
当然是容斥啦. 用dp预处理出\( f[i] \),表示在\( i \)价格时不考虑限制的方案数,转移方程是\( f[i]+=f[i-c[j]] \),用状压枚举不满足的状态容斥一下即可. #include<iostream> #include<cstdio> using namespace std; const long long N=100005; long long c[10],T,d[10],s,f[N],ans; long long read() { long long…
先预处理出没有上限的方案数,然后容斥,然后将所有东西的范围都变为[0,+oo),即可用预处理出的dp数组计算 1 #include<bits/stdc++.h> 2 using namespace std; 3 int n,s,a[11],b[11]; 4 long long ans,f[100005]; 5 int main(){ 6 f[0]=1; 7 for(int i=0;i<4;i++){ 8 scanf("%d",&a[i]); 9 for(int…
[BZOJ1042]硬币购物(动态规划,容斥原理) 题面 BZOJ 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<=100000,tot<=1000 Output 每次的方法数 Sample Input 1 2 5 10 2 3 2 3 1 10 1…