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的价值的东西.请问每次有多少种付款方法. 思路:这么老的题,居然今天才做到. ...
随机推荐
- Karma - MVC Framework for Unity3D
Karma is an MVC framework for Unity3D. Because of how Unity is structured, it actually turns out to ...
- The following packages have unmet dependencies错误
当出现类似这类错误: The following packages have unmet dependencies: python-dev : Depends: python (= 2.7.5-5ub ...
- FortiGate恢复出厂
1.需求 当需要把设备的所有配置删除,可进行恢复出厂操作.恢复出厂后所有配置都将丢失,若一定要恢复出厂设置建议前先备份当前的配置:备份配置操作步骤请参见"系统管理">> ...
- ajax POST跨域请求完美解决
方式: js前端请求: function getOcrInfo(imageData){$.ajax({ url: 'http://localhost:8080/LSWS/ws/ocr/getWeb ...
- php的ob缓存详解
前言引入 先看下面的代码: 这个代码,每次输出后都有sleep(1),表示程序执行暂定一秒,想象中浏览器应该是每隔1s钟,逐渐显示1到5的,然后事实情况确不是,浏览器访问的时候,等了5s种后,页面上一 ...
- android的Afinal框架下的数据库更新
项目需要,版本升级时给表添加了一些新的字段,发现出现异常. 解决方法:监听数据库的版本号,更新数据库. 创建FinalDb对象时使用如下的构造函数,监听版本号的变化: db = FinalDb.cre ...
- Spring配置文件XML详解
1.bean的基本属性配置: <!-- id是bean的标识符,必须唯一,如果没有配置id,name默认为标识符 如果配置了id,有配置了name,那么name为别名 name可以设置多个别名, ...
- selenium去掉下载弹窗
from selenium import webdriver import time import urllib2 class Download(): def __init__(self): self ...
- mysql5.7 新增的json字段类型
一.我们先创建一个表,准备点数据 CREATE TABLE `json_test` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'I ...
- 手机端适配iPhoneX
iPhoneX取消了物理按键,改成底部小黑条,这一改动导致网页出现比较尴尬的屏幕适配问题.对于网页而言,顶部(刘海部位)的适配问题浏览器已经做了处理,所以我们只需要关注底部与小黑条的适配问题即可(即常 ...