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


Sample Output


Solution

先递推一下哈

用递推式f[s]+=f[s-c[i]],求出没有个数限制情况下达到价值s的方案数

那么,有限制的方案数=f[s]-超过硬币1限制的方案数-超过硬币2限制的方案数-超过硬币3限制的方案数-超过硬币4限制的方案数+超过硬币1、2限制的方案数+超过硬币1、3限制的方案数+超过硬币1、4限制的方案数+。。。+超过硬币1、2、3、4限制的方案数

那么,对于超过情况

设s[i]代表第i种硬币的限制个数,c[i]代表第i种硬币的价值

我们只考虑超过s[i]+1的情况,剩下tot-c[i]*(s[i]+1)的话就自由分配

很科学吧

#include <stdio.h>
#define MaxN 100010
#define MaxBuf 1<<22
#define L long long
#define Blue() ((S==T&&(T=(S=B)+fread(B,1,MaxBuf,stdin),S==T))?0:*S++)
char B[MaxBuf],*S=B,*T=B;
template<class Type>inline void Rin(Type &x){
x=0;int c=Blue();bool b=0;
for(;c<48||c>57;c=Blue())
if(c==45)b=1;
for(;c>47&&c<58;c=Blue())
x=(x<<1)+(x<<3)+c-48;
x=b?-x:x;
}
int c[4],s[4],tar,kase;
L f[MaxN],ans;
void dfs(int x,int y,int sum){
if(sum<0)
return;
if(x==4){
ans+=y&1?-f[sum]:f[sum];
return;
}
dfs(x+1,y,sum);
dfs(x+1,y+1,sum-c[x]*(s[x]+1));
}
#define FO(x) {freopen(#x".in","r",stdin);}
int main(){
FO(bzoj1042);
for(int i=0;i<4;i++)
Rin(c[i]);
f[0]=1;
for(int i=0;i<4;i++)
for(int j=c[i];j<=100000;j++)
f[j]+=f[j-c[i]];
Rin(kase);
while(kase--){
for(int i=0;i<4;i++)
Rin(s[i]);
Rin(tar);
ans=0;
dfs(0,0,tar);
printf("%lld\n",ans);
}
return 0;
}

  

[bzoj1042][HAOI2008][硬币购物] (容斥原理+递推)的更多相关文章

  1. Bzoj 1042: [HAOI2008]硬币购物 容斥原理,动态规划,背包dp

    1042: [HAOI2008]硬币购物 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1747  Solved: 1015[Submit][Stat ...

  2. 【BZOJ-1042】硬币购物 容斥原理 + 完全背包

    1042: [HAOI2008]硬币购物 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1811  Solved: 1057[Submit][Stat ...

  3. BZOJ 1042: [HAOI2008]硬币购物 [容斥原理]

    1042: [HAOI2008]硬币购物 题意:4种硬币.面值分别为c1,c2,c3,c4.1000次询问每种硬币di个,凑出\(s\le 10^5\)的方案数 完全背包方案数? 询问太多了 看了题解 ...

  4. BZOJ1042 [HAOI2008]硬币购物 【完全背包 + 容斥】

    1042: [HAOI2008]硬币购物 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2924  Solved: 1802 [Submit][St ...

  5. BZOJ1042 [HAOI2008]硬币购物 完全背包 容斥原理

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1042 题目概括 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了t ...

  6. bzoj1042: [HAOI2008]硬币购物

    #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...

  7. BZOJ 1042: [HAOI2008]硬币购物 容斥原理_背包_好题

    Description 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买s i的价值的东西.请问每次有多少种付款方法. 题解: 十分喜 ...

  8. BZOJ1042:[HAOI2008]硬币购物(DP,容斥)

    Description 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买si的价值的东西.请问每次有多少种付款方法. Input 第一 ...

  9. BZOJ1042 HAOI2008硬币购物(任意模数NTT+多项式求逆+生成函数/容斥原理+动态规划)

    第一眼生成函数.四个等比数列形式的多项式相乘,可以化成四个分式.其中分母部分是固定的,可以多项式求逆预处理出来.而分子部分由于项数很少,询问时2^4算一下贡献就好了.这个思路比较直观.只是常数巨大,以 ...

随机推荐

  1. uva11542

    https://vjudge.net/problem/UVA-11542 xor高斯消元... 答案为2^f-1 其实书上有一个问题 样例有3种情况,其中4,6,15是绑在一起的,也就是他们必须满足一 ...

  2. 技嘉,u盘安装win7,提示“找不到驱动器设备驱动程序”

    错误图: 解决办法: 网上说什么换usb2.0,修复用命令启动芸芸,反正对我来说没发现有什么卵用 详细步骤: 点击进入详细步骤页面地址

  3. bzoj 3534: [Sdoi2014]重建【矩阵树定理】

    啊啊啊无脑背过果然不可取 比如这道题就不会写 参考:https://blog.csdn.net/iamzky/article/details/41317333 #include<iostream ...

  4. [App Store Connect帮助]六、测试 Beta 版本(4.3) 管理 Beta 版构建版本:为 Beta 版构建版本提供出口合规证明

    如果您没有完成出口合规证明,则该 Beta 版构建版本的状态为“缺少合规证明”.您可以在 TestFlight 部分中回答必需的出口合规证明问题. 必要职能:“帐户持有人”职能.“管理”职能或“App ...

  5. Get 和 Post 使用篇(1)

    1.Post 请求发送方式 实例: const string sResponseEncoding = "gb2312"; //测试文本信息 string postText = &q ...

  6. ACM_走楼梯Ⅱ

    走楼梯Ⅱ Time Limit: 2000/1000ms (Java/Others) Problem Description: 有一楼梯共N+1级,刚开始时你在第一级,若每次能走M级(1<=M& ...

  7. 【转】Spark:Master High Availability(HA)高可用配置的2种实现

    原博文出自于: 感谢! Spark Standalone集群是Master-Slaves架构的集群模式,和大部分的Master-Slaves结构集群一样,存在着Master单点故障的问题.如何解决这个 ...

  8. jQuery学习笔记(1)-初探

    一.jQuery是什么 1.jQuery是一套JavaScript脚本库,而不是框架:就好比"System是程序集"是类库,而"ASP.NET MVC"是框架: ...

  9. mysql若干问题

    一.Host ip is not allowed to connect to this MySql server 解决方法:这是因为你的账号不允许远程登录,只能在localhost.只要在localh ...

  10. 通信协议------Http、TCP、UDP

    CP   HTTP   UDP: 都是通信协议,也就是通信时所遵守的规则,只有双方按照这个规则“说话”,对方才能理解或为之服务. TCP   HTTP   UDP三者的关系: TCP/IP是个协议组, ...