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

1 2 5 10 2
3 2 3 1 10
1000 2 2 2 900

Sample Output

4
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]硬币购物相关推荐

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

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

  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. linux机器启动pg数据库命令,Linux下创建Postgresql数据库的方法步骤
  2. 中石油《计算机应用基础》,中石油华东《计算机应用基础》2018年秋学期在线作业(一).doc...
  3. linux debian硬盘安装,硬盘安装linux debian如何配置grub文件
  4. ROS: Ubuntu16.04安装ROS-kinetic
  5. Kanboard简单的可视化任务板,项目管理
  6. 项目管理沙龙第五次聚会
  7. 计算机谭音乐同桌的你,同桌的你_Ava_clover_新浪博客
  8. linux oracle10.2.0.1 lsnrctl无法启动
  9. 计算机太卡了怎么解决,电脑太慢太卡怎么办,电脑太慢太卡解决方法
  10. Tomcat学习总结(16)—— Tomcat优化时的参数分析
  11. xx云网络实施方案案例
  12. 双A复制mysql_mysql双主复制并利用keepalived做高可用
  13. C语言程序设计题(函数题中15道)
  14. 维基百科中文语料建模
  15. matlab波形叠加,matlab程序两列波相向传播叠加波形图和动画.doc
  16. Assignment写作选题及诀窍怎么分析?
  17. [DEMO] 互联网广告RTB机制简介
  18. discuz论坛网站更换域名的方法及步骤
  19. android优化最强软件,手机提速谁最行?十款安卓优化软件比拼
  20. 使用存储过程返回结果集

热门文章

  1. 【Qt】Qt再学习(七):QLocalServer、QLocalSocket
  2. c语言基础习题下载,C语言基础题目
  3. 如何代理ip25采取云速捷_长租公寓暴雷,作为租客应如何维护自己的合法权益?...
  4. 高斯拟合原理_看得见的高斯过程:这是一份直观的入门解读
  5. Android Linux 9,linux学习(一)(ubuntu9.10 玩转android)
  6. 唯一索引和普通索引的选择
  7. Java项目:医院预约挂号系统(java+SpringBoot+Maven+Vue+mysql)
  8. 出入口控制系统工程设计规范_[问答]连载77-控制系统之间如何时钟同步?
  9. VS Code – No source control providers 解决方法
  10. iOS开发系列--让你的应用“动”起来