题目传送门

据说\(NOIp\)前写题解会\(\mathcal{RP}\)++


看数据范围,肯定不能写多重背包,会\(T\)飞~
如果每种硬币没有个数限制,就可以用完全背包了。

正难则反,我们可以先用完全背包预处理,然后减去不合法的情况。不合法的情况就是一个\(s-(d+1) \times c\)的背包
但如果我们直接减去,会导致重复计算。比如我们减去第一种超的和第二种超的,第一种和第二种都超的就被减了两次。所以要在容斥一波

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
long long ans,f[100010],c[5],d[5];
int read(){int k=0; char c=getchar();while(c<'0'||c>'9') c=getchar();while(c>='0'&&c<='9')k=k*10+c-48,c=getchar();return k;
}
int main(){for(int i=0;i<=3;i++) c[i]=read();f[0]=1LL;  //完全背包预处理for(int i=0;i<=3;i++)for(int j=c[i];j<=100001;j++)f[j]+=f[j-c[i]];int t=read();while(t--){for(int i=0;i<=3;i++) d[i]=read();int s=read(); ans=f[s];for(int i=1;i<=15;i++){  //用子集枚举来容斥int flag=0,num=s;for(int j=0;j<=3;j++)if(i&(1<<j))num-=(d[j]+1)*c[j],++flag; //减去不合法情况if(num>=0)  //容斥:奇减偶加if(flag&1) ans-=f[num];else ans+=f[num];}cout<<ans<<endl;}return 0;
}

转载于:https://www.cnblogs.com/wxl-Ezio/p/9929816.html

HAOI2008 硬币购物相关推荐

  1. BZOJ 1042 [HAOI2008]硬币购物

    1042: [HAOI2008]硬币购物 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1446  Solved: 845 [Submit][Sta ...

  2. P1450 [HAOI2008]硬币购物

    P1450 [HAOI2008]硬币购物 题意: 共有 4 种硬币.面值分别为c1,c2,c3,c4c_1,c_2,c_3,c_4c1​,c2​,c3​,c4​. 某人去商店买东西,去了 n 次,对于 ...

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

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

  4. bzoj 1042: [HAOI2008]硬币购物(dp+容斥)

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

  5. BZOJ1042 [HAOI2008]硬币购物

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

  6. 1042: [HAOI2008]硬币购物 - BZOJ

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

  7. [bzoj1042][HAOI2008]硬币购物

    有三种硬币,每种有自己的币值. 然后有n次询问,每次都给出每种硬币的数量和要付的钱s,求有多少种付法.n<=1000 s<=100000 ------ 不考虑限制,就是个简单dp.... ...

  8. P1450 [HAOI2008] 硬币购物题解

    题面 题目描述 共有 4 种硬币.面值分别为 ,,,​. 某人去商店买东西,去了 n 次,对于每次购买,他带了 ​ 枚 i 种硬币,想购买 s 的价值的东西.请问每次有多少种付款方法. 输入格式 输入 ...

  9. bzoj 1042 HAOI2008 硬币购物

    这道题思路是在是神. 先dp出没有限制时候的方案数. dp的时候注意 先循环 1..4 再循环 1..maxs 防止重复.边界是f[0] = 1. 这么基础的背包都忘记了=_= 接下来处理有重复的问题 ...

最新文章

  1. Eclipse中通过Android模拟器调用OpenGL ES2.0函数操作步骤
  2. java http客户端_java 11 标准Java异步HTTP客户端
  3. c语言贪心算法背包问题_GGTalk 中的算法知识 01背包问题
  4. 如何使用点击超链接的方式打开Android手机上的应用
  5. POJ - 3624 Charm Bracelet
  6. 计算机工程师专用小工具,204个联想工程师专用小工具合集
  7. Javascript:关闭当前界面
  8. 【Spring Boot】RestTemplate使用总结
  9. jsonrpc php使用,基于php的json rpc原理及应用
  10. Firefox版哔哩哔哩助手,修改自chrome1.2.1版
  11. Jvavscript- 跟着李南江学编程
  12. win7怎么设置显示计算机,教您win7怎么设置分辨率
  13. oracle常用函数汇总(1)
  14. Excel 文件的扩展名 .xls 与 .xlsx 的区别
  15. org.apache.catalina.core.StandardWrapperValve invoke的解决
  16. 免实名的域名有吗?域名实名制认证有哪些要求?
  17. 腾讯云服务器安装win10
  18. C语言 | 位域的使用详解
  19. CAD内容很少,文件很大清理无效
  20. SpringBoot+Layui 打印PDF

热门文章

  1. dederss.php美国与,dedecms添加rss订阅功能实现代码
  2. Excel自动转曲线图的时PHP,excel表格数据转为曲线-如何将EXCEL表中的数据生成曲线...
  3. 如何减小电压跟随器输出电阻_补课贴 | 关于运算放大器和比较器的异同,那些你不得不知道的小知识!...
  4. python编程英语单词怎么写_用Python写一个背英文单词程序
  5. php的数据结构有哪些,PHP数据结构有几种
  6. java sendredirect 参数_使用response.sendRedirect()传递隐藏参数
  7. springboot读取linux文件_SpringBoot 读取文件代码模版
  8. Regularized least-squares classification(RLSC)
  9. 汇编学习--6.13--基础知识
  10. 剑指offer(面试战备ing,持续更新)