BZOJ1042 [HAOI2008]硬币购物
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
3 2 3 1 10
1000 2 2 2 900
Sample Output
27
题解
令$f_i$表示不限使用四种硬币时付i元的方案数(就是完全背包)。预处理$f_{0..100000}$。
询问时,利用容斥原理,答案等于不限使用硬币的方案数-有一种硬币必须使用$d_i$次以上的方案数+有两种硬币必须使用$d_i$次以上的方案数-有三种硬币必须使用$d_i$次以上的方案数+有四种硬币必须使用$d_i$次以上的方案数。
枚举哪几种硬币一定使用$d_i$枚以上,计算时由于一定使用至少$d_i+1$次,只需要将$s$减去$(d_i+1)*c+i$再求方案数。
每次需要询问16次,时间复杂度$O(16)$.
总时间复杂度$O(100000+16tot)$(在渐进意义上它是和$O(tot)$一样的,但在wys意义上不是)。
#include <cstdio>
typedef long long LL;
const int N = 100050;
LL f[N], c[4];
LL s, d[4];
LL calc(int S) {LL t = s;int sign = 1;for (int i = 0; i < 4; ++i)if ((S >> i) & 1) {t -= (d[i] + 1) * c[i];sign = -sign;}if (t < 0) return 0;return sign * f[t];
}
int main() {f[0] = 1;for (int i = 0; i < 4; ++i) {scanf("%lld", &c[i]);for (int j = c[i]; j < N; ++j)f[j] += f[j - c[i]];}int T;scanf("%d", &T);while (T--) {scanf("%lld%lld%lld%lld%lld", &d[0], &d[1], &d[2], &d[3], &s);LL ans = 0;for (int i = 0; i < 16; ++i) ans += calc(i);printf("%lld\n", ans);}return 0;
}
转载于:https://www.cnblogs.com/y-clever/p/6999141.html
BZOJ1042 [HAOI2008]硬币购物相关推荐
- [bzoj1042][HAOI2008]硬币购物
有三种硬币,每种有自己的币值. 然后有n次询问,每次都给出每种硬币的数量和要付的钱s,求有多少种付法.n<=1000 s<=100000 ------ 不考虑限制,就是个简单dp.... ...
- 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 的价值的东西.请问每次有多少种付款方法. 输入格式 输入 ...
最新文章
- linux机器启动pg数据库命令,Linux下创建Postgresql数据库的方法步骤
- 中石油《计算机应用基础》,中石油华东《计算机应用基础》2018年秋学期在线作业(一).doc...
- linux debian硬盘安装,硬盘安装linux debian如何配置grub文件
- ROS: Ubuntu16.04安装ROS-kinetic
- Kanboard简单的可视化任务板,项目管理
- 项目管理沙龙第五次聚会
- 计算机谭音乐同桌的你,同桌的你_Ava_clover_新浪博客
- linux oracle10.2.0.1 lsnrctl无法启动
- 计算机太卡了怎么解决,电脑太慢太卡怎么办,电脑太慢太卡解决方法
- Tomcat学习总结(16)—— Tomcat优化时的参数分析
- xx云网络实施方案案例
- 双A复制mysql_mysql双主复制并利用keepalived做高可用
- C语言程序设计题(函数题中15道)
- 维基百科中文语料建模
- matlab波形叠加,matlab程序两列波相向传播叠加波形图和动画.doc
- Assignment写作选题及诀窍怎么分析?
- [DEMO] 互联网广告RTB机制简介
- discuz论坛网站更换域名的方法及步骤
- android优化最强软件,手机提速谁最行?十款安卓优化软件比拼
- 使用存储过程返回结果集
热门文章
- 【Qt】Qt再学习(七):QLocalServer、QLocalSocket
- c语言基础习题下载,C语言基础题目
- 如何代理ip25采取云速捷_长租公寓暴雷,作为租客应如何维护自己的合法权益?...
- 高斯拟合原理_看得见的高斯过程:这是一份直观的入门解读
- Android Linux 9,linux学习(一)(ubuntu9.10 玩转android)
- 唯一索引和普通索引的选择
- Java项目:医院预约挂号系统(java+SpringBoot+Maven+Vue+mysql)
- 出入口控制系统工程设计规范_[问答]连载77-控制系统之间如何时钟同步?
- VS Code – No source control providers 解决方法
- iOS开发系列--让你的应用“动”起来