有三种硬币,每种有自己的币值。

然后有n次询问,每次都给出每种硬币的数量和要付的钱s,求有多少种付法。n<=1000 s<=100000

------

不考虑限制,就是个简单dp....

有限制的时候,我们可以考虑反过来用总的方案数量剪掉不合法的。

根据容斥原理,不合法的情况=

有1种硬币数量不合法即第1种不合法+第2+第3+第4  再去掉有两个不合法的12种都不合法-23种都不合法-34种都不合法-........加上三种不合法的即123种不合法+124不合法...  最后减去1234都不合法。

所以每次询问都这样做一遍,让一种硬币不合法只要付比他的限制多一个就可以了,剩下的钱可以随意付,直接去dp里查值。

复杂度4*s+n*2^4

#include<iostream>
#include<cstdio>
#define ll long long
using namespace std;
inline int read()
{int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0'; ch=getchar();}return x*f;
}ll ans;
int c[5],x[5],n,s;
ll f[100005];void dfs(int i,int p,int sum)
{// printf("%d %d %d\n",i,p,sum);if(i>4){ans+=p*f[sum];return;}dfs(i+1,p,sum);if(sum>=c[i]*(x[i]+1))dfs(i+1,-p,sum-c[i]*(x[i]+1));
}int main()
{for(int i=1;i<=4;i++)c[i]=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]];n=read();for(int i=1;i<=n;i++){for(int j=1;j<=4;j++)x[j]=read();s=read();ans=0;dfs(1,1,s);printf("%lld\n",ans);}return 0;
}

转载于:https://www.cnblogs.com/FallDream/p/bzoj1042.html

[bzoj1042][HAOI2008]硬币购物相关推荐

  1. BZOJ1042 [HAOI2008]硬币购物

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

  2. BZOJ 1042 [HAOI2008]硬币购物

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

  3. 【BZOJ1042】硬币购物(动态规划,容斥原理)

    [BZOJ1042]硬币购物(动态规划,容斥原理) 题面 BZOJ Description 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬 ...

  4. P1450 [HAOI2008]硬币购物

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

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

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

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

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

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

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

  8. HAOI2008 硬币购物

    题目传送门 据说\(NOIp\)前写题解会\(\mathcal{RP}\)++ 看数据范围,肯定不能写多重背包,会\(T\)飞~ 如果每种硬币没有个数限制,就可以用完全背包了. 正难则反,我们可以先用 ...

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

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

最新文章

  1. Cookie和Session的区别
  2. 索引名 oracle,ORACLE 索引名称矫情
  3. js 判断变量是否有值返回bool_基础 |判断 JS 中的变量类型竟然可以如此简单
  4. Java中Image类与ImageIcon类的区别
  5. php 连接mysql 错误排查一例
  6. Serverless 实战——使用 Rendertron 搭建 Headless Chrome 渲染解决方案
  7. AppleScript 以管理员身份运行程序
  8. 修改Static控件的字体颜色
  9. pythonset是什么类型的游戏_Python集合(set)类型的操作
  10. Spring AOP 功能使用详解
  11. 学习设计模式 - 中介者模式
  12. 百度文库免费下载,亲测,原格式文档
  13. GW INSTEK GPD 3303系列稳压源控制软件(自行使用c#编写)更新
  14. 以太坊公链节点连接节点超时问题排查
  15. bootstrap treeview 无限子级菜单展示与JSON处理 完整
  16. 第二十五章《图书管理系统》第1节:图书管理系统简介
  17. Excel 如何让一列中的很多数 同时加上一个数
  18. linux对nohup日志进行定时拆分并且删除~持续补充
  19. 微透镜阵列的高级模拟
  20. XVI Open Cup named after E.V. Pankratiev. GP of Siberia

热门文章

  1. xdoj 易碎的鸟蛋(鹰蛋实验)
  2. php 解决方案,php优化解决方案
  3. python直接执行*.sql_Python Django 之 直接执行自定义SQL语句(一)
  4. bd2和mysql语法区别,经验:在MySQL数据库中,这4种方式可以避免重复的插入数据!...
  5. linux mint 修改dns,如何在Ubuntu和LinuxMint中刷新DNS缓存
  6. linux 窗口z order,wxPython窗口z-order设置
  7. aes js 加盐值 解密_crypto-js aes加密解密
  8. java 获取 反射 方法 名_乐字节Java反射之一:反射概念与获取反射源头Class
  9. python-pcl GPU、输入输出模块教程翻译
  10. RANSAC算法(2):(拟合平面)本文以地面为基础以及源码分布解读