P1450 [HAOI2008]硬币购物(完全背包+容斥)
暴力做法:每次询问跑一遍多重背包。
考虑正解
其实每次跑多重背包都有一部分是被重复算的,浪费了大量时间
考虑先做一遍完全背包
算出$f[i]$表示买价值$i$东西的方案数
蓝后对每次询问价值$t$,减去不合法的方案
$c_1$超额方案$f[t-c_1*(d_1+1)]$,表示取了$d_1+1$个$c_1$,剩下随便取的方案数(这就是差分数组)
如法炮制,减去$c_2,c_3,c_4$的超额方案数
但是我们发现,我们多减了$(c_1,c_2),(c_1,c_3),(c_1,c_4)......$同时超额的方案数
于是就再把方案数$f[t-c_i*(d_i+1)-c_j*(d_j+1)]$给加回来
然鹅我们又多加上了$(c_1,c_2,c_3)....$3种硬币同时超额的方案数,于是又要减掉这些方案
最后再把4种硬币都超额的方案数加回来
这就是容斥辣
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
ll ans,f[];
int c[],d[],T,t;
int main(){
scanf("%d%d%d%d%d",&c[],&c[],&c[],&c[],&T);
f[]=;
for(int i=;i<=;i++)
for(int j=c[i];j<=;++j)
f[j]+=f[j-c[i]];//预处理
while(T--){
scanf("%d%d%d%d%d",&d[],&d[],&d[],&d[],&t);
ans=f[t];
for(int i=;i<;++i){//二进制枚举子集
ll now=t,k=;
for(int j=;j<=;++j)
if((i&(<<j)))
k=-k,now-=c[j]*(d[j]+);
if(now>=) ans+=k*f[now];
}printf("%lld\n",ans);
}return ;
}
P1450 [HAOI2008]硬币购物(完全背包+容斥)的更多相关文章
- Luogu-P1450 [HAOI2008]硬币购物-完全背包+容斥定理
Luogu-P1450 [HAOI2008]硬币购物-完全背包+容斥定理 [Problem Description] 略 [Solution] 上述题目等价于:有\(4\)种物品,每种物品有\(d_i ...
- BZOJ 1042 [HAOI2008]硬币购物(完全背包+容斥)
题意: 4种硬币买价值为V的商品,每种硬币有numi个,问有多少种买法 1000次询问,numi<1e5 思路: 完全背包计算出没有numi限制下的买法, 然后答案为dp[V]-(s1+s2+s ...
- BZOJ-1042:硬币购物(背包+容斥)
题意:硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买si的价值的东西.请问每次有多少种付款方法. 思路:这么老的题,居然今天才做到. ...
- [BZOJ 1042] [HAOI2008] 硬币购物 【DP + 容斥】
题目链接:BZOJ - 1042 题目分析 首先 Orz Hzwer ,代码题解都是看的他的 blog. 这道题首先使用DP预处理,先求出,在不考虑每种硬币个数的限制的情况下,每个钱数有多少种拼凑方案 ...
- bzoj1042: [HAOI2008]硬币购物(DP+容斥)
1600+人过的题排#32还不错嘿嘿 浴谷夏令营讲过的题,居然1A了 预处理出f[i]表示购买价值为i的东西的方案数 然后每次询问进行一次容斥,答案为总方案数-第一种硬币超限方案-第二种超限方案-第三 ...
- [Luogu P1450] [HAOI2008]硬币购物 背包DP+容斥
题面 传送门:https://www.luogu.org/problemnew/show/P1450 Solution 这是一道很有意思的在背包里面做容斥的题目. 首先,我们可以很轻松地想到暴力做背包 ...
- 洛谷—— P1450 [HAOI2008]硬币购物
P1450 [HAOI2008]硬币购物 硬币购物一共有$4$种硬币.面值分别为$c1,c2,c3,c4$.某人去商店买东西,去了$tot$次.每次带$di$枚$ci$硬币,买$si$的价值的东西.请 ...
- 2021.12.06 P1450 [HAOI2008]硬币购物(组合数学+抽屉原理+DP)
2021.12.06 P1450 [HAOI2008]硬币购物(组合数学+抽屉原理+DP) https://www.luogu.com.cn/problem/P1450 题意: 共有 44 种硬币.面 ...
- 洛谷P1450 [HAOI2008]硬币购物 背包+容斥
无限背包+容斥? 观察数据范围,可重背包无法通过,假设没有数量限制,利用用无限背包 进行预处理,因为实际硬币数有限,考虑减掉多加的部分 如何减?利用容斥原理,减掉不符合第一枚硬币数的,第二枚,依次类推 ...
随机推荐
- ALM 中查看某个 test 的更改 history 历史
ALM 中要查看某个 test 更改历史, 需要下面两个表: AUDIT_LOG and AUDIT_PROPERTIES ------- Get Test modification history ...
- X86-32位架构的CPU是不是内存只能到4G
不是的,可以通过分页机制扩展实现超过4G内存的支持. 什么是分页机制扩展? PAE. 什么是PAE? PAE如何实现的?
- WangEditor+thinkphp5【真实可用+原创】
今天公司要编辑文章,一开始准备用ueditor,但是到了linux环境下一直不行,所以最终放弃.改用另外一个编辑器WangEditor.更加轻量级. 遇到最大的问题是 一个是图片上传,一个是div中的 ...
- CSS盒子模型 box-sizing 用法
盒子模型 box-sizing 属性 语法:box-sizing :content-box || border-box || inherit 属性值: content-box 为(w3c标准盒子模型 ...
- war 包tomcat部署和maven的tomcat插件部署的不同
不用插件 1在linux服务器上下载号tomcat 或者上传tomcat 2上传war包,最好创建一个目录房war包,和tomcat 3解压war包,jar -xvf war 或者unzip wa ...
- lnmp 切换PHP版本,并且安装swoole
lnmp 切换php版本 进入 lnmp 安装的目录,进入install.sh 的目录执行: sudo ./install.sh mphp 备注: find / -name install.sh 备注 ...
- Spring 基于Session的创建实例
需求 提供一个网页,根据导入的Excel数据计算结果. 第一版本设计 Controller层 @RestController public class QuoteController { privat ...
- eclipse myeclipse中的一些配置
1.显示.setting 点击三角号 选择customsize view 取消.*resources myeclipse如何更改项目名 点击项目名->alt+enter(properties)
- flask下载文件---文件流
html: <a name="downloadbtn" class="btn btn-success pull-right" href="/do ...
- py001
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple -------------------------------- ...