[bzoj1042][HAOI2008]硬币购物
有三种硬币,每种有自己的币值。
然后有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]硬币购物相关推荐
- BZOJ1042 [HAOI2008]硬币购物
Description 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买s i的价值的东西.请问每次有多少种付款方法. Input 第 ...
- BZOJ 1042 [HAOI2008]硬币购物
1042: [HAOI2008]硬币购物 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1446 Solved: 845 [Submit][Sta ...
- 【BZOJ1042】硬币购物(动态规划,容斥原理)
[BZOJ1042]硬币购物(动态规划,容斥原理) 题面 BZOJ Description 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬 ...
- P1450 [HAOI2008]硬币购物
P1450 [HAOI2008]硬币购物 题意: 共有 4 种硬币.面值分别为c1,c2,c3,c4c_1,c_2,c_3,c_4c1,c2,c3,c4. 某人去商店买东西,去了 n 次,对于 ...
- BZOJ 1042: [HAOI2008]硬币购物 [容斥原理]
1042: [HAOI2008]硬币购物 题意:4种硬币.面值分别为c1,c2,c3,c4.1000次询问每种硬币di个,凑出\(s\le 10^5\)的方案数 完全背包方案数? 询问太多了 看了题解 ...
- bzoj 1042: [HAOI2008]硬币购物(dp+容斥)
1042: [HAOI2008]硬币购物 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2555 Solved: 1537 [Submit][St ...
- 1042: [HAOI2008]硬币购物 - BZOJ
Description 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买si的价值的东西.请问每次有多少种付款方法. Input 第一 ...
- HAOI2008 硬币购物
题目传送门 据说\(NOIp\)前写题解会\(\mathcal{RP}\)++ 看数据范围,肯定不能写多重背包,会\(T\)飞~ 如果每种硬币没有个数限制,就可以用完全背包了. 正难则反,我们可以先用 ...
- P1450 [HAOI2008] 硬币购物题解
题面 题目描述 共有 4 种硬币.面值分别为 ,,,. 某人去商店买东西,去了 n 次,对于每次购买,他带了 枚 i 种硬币,想购买 s 的价值的东西.请问每次有多少种付款方法. 输入格式 输入 ...
最新文章
- Cookie和Session的区别
- 索引名 oracle,ORACLE 索引名称矫情
- js 判断变量是否有值返回bool_基础 |判断 JS 中的变量类型竟然可以如此简单
- Java中Image类与ImageIcon类的区别
- php 连接mysql 错误排查一例
- Serverless 实战——使用 Rendertron 搭建 Headless Chrome 渲染解决方案
- AppleScript 以管理员身份运行程序
- 修改Static控件的字体颜色
- pythonset是什么类型的游戏_Python集合(set)类型的操作
- Spring AOP 功能使用详解
- 学习设计模式 - 中介者模式
- 百度文库免费下载,亲测,原格式文档
- GW INSTEK GPD 3303系列稳压源控制软件(自行使用c#编写)更新
- 以太坊公链节点连接节点超时问题排查
- bootstrap treeview 无限子级菜单展示与JSON处理 完整
- 第二十五章《图书管理系统》第1节:图书管理系统简介
- Excel 如何让一列中的很多数 同时加上一个数
- linux对nohup日志进行定时拆分并且删除~持续补充
- 微透镜阵列的高级模拟
- XVI Open Cup named after E.V. Pankratiev. GP of Siberia
热门文章
- xdoj 易碎的鸟蛋(鹰蛋实验)
- php 解决方案,php优化解决方案
- python直接执行*.sql_Python Django 之 直接执行自定义SQL语句(一)
- bd2和mysql语法区别,经验:在MySQL数据库中,这4种方式可以避免重复的插入数据!...
- linux mint 修改dns,如何在Ubuntu和LinuxMint中刷新DNS缓存
- linux 窗口z order,wxPython窗口z-order设置
- aes js 加盐值 解密_crypto-js aes加密解密
- java 获取 反射 方法 名_乐字节Java反射之一:反射概念与获取反射源头Class
- python-pcl GPU、输入输出模块教程翻译
- RANSAC算法(2):(拟合平面)本文以地面为基础以及源码分布解读