2019.02.09 bzoj1042: [HAOI2008]硬币购物(完全背包+容斥原理)
传送门
题意简述:有四种面值的硬币,现在qqq次询问(q≤1000)(q\le1000)(q≤1000),每次给出四种硬币的使用上限问最后刚好凑出sss块钱的方案数(s≤100000)(s\le100000)(s≤100000).
思路:先跑完全背包预处理出所有硬币都无限制时候的答案。
然后每次询问的时候枚举容斥掉多算的情况即可。
代码:
#include<bits/stdc++.h>
using namespace std;
long long tot,c[5],d[5],s,dp[100005];
inline long long f(long long i){return c[i]*(d[i]+1);}
int main(){
scanf("%lld%lld%lld%lld%lld",&c[1],&c[2],&c[3],&c[4],&tot);
dp[0]=1;
for(int i=1;i<=4;++i)for(int j=c[i];j<=100005;++j)dp[j]+=dp[j-c[i]];
while(tot--){
long long ans=0;
scanf("%lld%lld%lld%lld%lld",&d[1],&d[2],&d[3],&d[4],&s);
ans=dp[s];
if(s-f(1)>=0)ans-=dp[s-f(1)];
if(s-f(2)>=0)ans-=dp[s-f(2)];
if(s-f(3)>=0)ans-=dp[s-f(3)];
if(s-f(4)>=0)ans-=dp[s-f(4)];
if(s-f(1)-f(2)>=0)ans+=dp[s-f(1)-f(2)];
if(s-f(1)-f(3)>=0)ans+=dp[s-f(1)-f(3)];
if(s-f(1)-f(4)>=0)ans+=dp[s-f(1)-f(4)];
if(s-f(2)-f(3)>=0)ans+=dp[s-f(2)-f(3)];
if(s-f(2)-f(4)>=0)ans+=dp[s-f(2)-f(4)];
if(s-f(3)-f(4)>=0)ans+=dp[s-f(3)-f(4)];
if(s-f(1)-f(2)-f(3)>=0)ans-=dp[s-f(1)-f(2)-f(3)];
if(s-f(4)-f(2)-f(3)>=0)ans-=dp[s-f(4)-f(2)-f(3)];
if(s-f(1)-f(2)-f(4)>=0)ans-=dp[s-f(1)-f(2)-f(4)];
if(s-f(1)-f(4)-f(3)>=0)ans-=dp[s-f(1)-f(4)-f(3)];
if(s-f(1)-f(2)-f(3)-f(4)>=0)ans+=dp[s-f(1)-f(2)-f(3)-f(4)];
printf("%lld\n",ans);
}
return 0;
}
2019.02.09 bzoj1042: [HAOI2008]硬币购物(完全背包+容斥原理)的更多相关文章
- BZOJ1042 [HAOI2008]硬币购物 完全背包 容斥原理
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1042 题目概括 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了t ...
- Luogu-P1450 [HAOI2008]硬币购物-完全背包+容斥定理
Luogu-P1450 [HAOI2008]硬币购物-完全背包+容斥定理 [Problem Description] 略 [Solution] 上述题目等价于:有\(4\)种物品,每种物品有\(d_i ...
- BZOJ1042 [HAOI2008]硬币购物 【完全背包 + 容斥】
1042: [HAOI2008]硬币购物 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2924 Solved: 1802 [Submit][St ...
- BZOJ 1042 [HAOI2008]硬币购物(完全背包+容斥)
题意: 4种硬币买价值为V的商品,每种硬币有numi个,问有多少种买法 1000次询问,numi<1e5 思路: 完全背包计算出没有numi限制下的买法, 然后答案为dp[V]-(s1+s2+s ...
- [bzoj1042][HAOI2008][硬币购物] (容斥原理+递推)
Description 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买si的价值的东西.请问每次有多少种付款方法. Input 第一 ...
- bzoj1042: [HAOI2008]硬币购物
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...
- BZOJ1042:[HAOI2008]硬币购物(DP,容斥)
Description 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买si的价值的东西.请问每次有多少种付款方法. Input 第一 ...
- 【BZOJ】1042: [HAOI2008]硬币购物(dp+容斥原理)
http://www.lydsy.com/JudgeOnline/problem.php?id=1042 一开始写了个O(nv)的背包,果断tle... 看了题解,,好神..用了组合数学中的多重集合方 ...
- BZOJ-1042:硬币购物(背包+容斥)
题意:硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买si的价值的东西.请问每次有多少种付款方法. 思路:这么老的题,居然今天才做到. ...
随机推荐
- 大数据hadoop的伪分布式搭建
1.配置环境变量JDK配置 1.JDK安装 个人喜欢在 vi ~/.bash profile 下配置 export JAVA_HOME=/home/hadoop/app/jdk1.8.0_91ex ...
- Centos7在虚拟机中扩展磁盘空间
说明 情况:已经在VirtualBox虚拟机创建了一个磁盘并已经装好了系统,发现磁盘空间太小,需要再添加一个磁盘的大小.或者说Centos7系统需要扩展磁盘空间. 步骤 1.VirtualBox新建磁 ...
- Unity3D研究院之设置自动旋转屏幕默认旋转方向
如下图所示,在处理屏幕默认旋转方向的时候可以在这里进行选择,上下左右一共是4个方向. 策划的需求是游戏采用横屏,但是要求支持两个方向自动旋转,如下图所示,我的设置是这样的. Default Orien ...
- css3动画:执行前不显示,执行后显示
今天做一个轮播,轮播图上使用animation.需求是当滚动到当前图片时,图片中的div从无到有逐渐显示, 遇到的问题是:页面刷新时,此图片上的div可以从无到有,但第二次滚动到此图片时,总是先显示一 ...
- 配置eclipse+SDK+ADT开发环境
第一步:配置jdk和eclipse环境(已完成): 第二步:ADT配置:依次点击菜单栏:help -> Install new software -> Add -> Local... ...
- 13-算法训练 P0505
算法训练 P0505 时间限制:1.0s 内存限制:256.0MB 一个整数n的阶乘可以写成n!,它表示从1到n这n个整数的乘积.阶乘的增长速度非常快,例如,13!就已经比较大了,已 ...
- 序列化_Transient
要实际的操作一下Serialize的代码Demo, 加深理解(某投行很喜欢问这个问题):transient关键字虽然目前还没有人面试过我,但是也是个考点
- Freemarker全部文档和具体实例
自己查找到了一些相关的资料分享给大家,有兴趣的可以去看看! Freemarker全部文档:http://www.open-open.com/doc/list/101?o=p
- Java运算符号,对象赋值,别名
生活发生的一切,才会促使着我继续前行,今天继续更新哦,看书中的代码练习. 例子1 引入net.mindview.util.Print.* ,方便打印结果. package com.date0529; ...
- Linux apt-get命令
一.简介 Ubuntu系列系统包管理工具. 二.常用指令 1.查询功能 apt-cache search package 搜索软件包 apt-cache show package 获取包的相关 ...