无限背包+容斥?


观察数据范围,可重背包无法通过,假设没有数量限制,利用用无限背包

进行预处理,因为实际硬币数有限,考虑减掉多加的部分

如何减?利用容斥原理,减掉不符合第一枚硬币数的,第二枚,依次类推

加上不符第一枚和第二枚的方案,第一枚和第三枚的方案以此类推,不明

白原理可以去看一下容斥原理

较长代码(懒得优化)

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#define ll long long
using namespace std;
const int maxn=1e5+10;
inline int read(){
int ret=0;
int f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')
f=-f;
ch=getchar();
}
while(ch<='9'&&ch>='0'){
ret=ret*10+(ch^'0');
ch=getchar();
}
return f*ret;
}
int c[5];
ll s;
ll dp[maxn];
int n;
ll ans;
ll d[5];
ll getn(int x){
return (d[x]+1)*c[x];
}
int main(){
// freopen("a.txt","r",stdin);
for(int i=1;i<=4;i++){
// c[i]=read();
cin>>c[i];
}
cin>>n;
// n=read();
// cout<<n;
dp[0]=1;
// cout<<dp[-10]<<endl;
for(int i=1;i<=4;i++){
for(int j=c[i];j<=maxn;j++){
dp[j]+=dp[j-c[i]];
}
}
// cout<<dp[10]<<endl;
while(n){
n--;
for(int i=1;i<=4;i++){
//d[i]=read();
cin>>d[i];
}
// s=read();
cin>>s;
ans=dp[s];
for(int i=1;i<=4;i++){
if(s>=getn(i)){
ans-=dp[s-getn(i)];
}
}
if(s>=getn(1)+getn(2)){
ans+=dp[s-getn(1)-getn(2)];
}
if(s>=getn(2)+getn(3)){
ans+=dp[s-getn(2)-getn(3)];
}
if(s>=getn(3)+getn(4)){
ans+=dp[s-getn(3)-getn(4)];
}
if(s>=getn(1)+getn(4)){
ans+=dp[s-getn(1)-getn(4)];
}
if(s>=getn(2)+getn(4)){
ans+=dp[s-getn(4)-getn(2)];
}
if(s>=getn(1)+getn(3)){
ans+=dp[s-getn(1)-getn(3)];
}
if(s>=getn(1)+getn(2)+getn(3)){
ans-=dp[s-getn(1)-getn(2)-getn(3)];
}
if(s>=getn(1)+getn(2)+getn(4)){
ans-=dp[s-getn(1)-getn(2)-getn(4)];
}
if(s>=getn(1)+getn(3)+getn(4)){
ans-=dp[s-getn(1)-getn(3)-getn(4)];
}
if(s>=getn(4)+getn(2)+getn(3)){
ans-=dp[s-getn(4)-getn(2)-getn(3)];
}
if(s>=getn(1)+getn(2)+getn(3)+getn(4)){
ans+=dp[s-getn(1)-getn(2)-getn(3)-getn(4)];
}
cout<<ans<<endl;
}
return 0;
}

完结撒花

洛谷P1450 [HAOI2008]硬币购物 背包+容斥的更多相关文章

  1. 洛谷—— P1450 [HAOI2008]硬币购物

    P1450 [HAOI2008]硬币购物 硬币购物一共有$4$种硬币.面值分别为$c1,c2,c3,c4$.某人去商店买东西,去了$tot$次.每次带$di$枚$ci$硬币,买$si$的价值的东西.请 ...

  2. 洛谷P1450 [HAOI2008]硬币购物(背包问题,容斥原理)

    洛谷题目传送门 我实在是太弱了,第一次正儿八经写背包DP,第一次领会如此巧妙的容斥原理的应用...... 对每次询问都做一遍多重背包,显然T飞,就不考虑了 关键就在于每次询问如何利用重复的信息 我这么 ...

  3. 洛谷P1450 [HAOI2008]硬币购物

    题目描述 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买si的价值的东西.请问每次有多少种付款方法. 输入输出格式 输入格式: 第一 ...

  4. [Luogu P1450] [HAOI2008]硬币购物 背包DP+容斥

    题面 传送门:https://www.luogu.org/problemnew/show/P1450 Solution 这是一道很有意思的在背包里面做容斥的题目. 首先,我们可以很轻松地想到暴力做背包 ...

  5. Luogu P1450 [HAOI2008]硬币购物 背包+容斥原理

    考虑如果没有个数的限制,那么就是一个完全背包,所以先跑一个完全背包,求出没有个数限制的方案数即可. 因为有个数的限制,所以容斥一下:没有1个超过限制的方案=至少0个超过限制-至少1个超过限制+至少2个 ...

  6. 【洛谷P1450】硬币购物

    题目大意:给定 4 种面值的硬币和相应的个数,求购买 S 元商品的方案数是多少. 题解: 考虑没有硬币个数的限制的话,购买 S 元商品的方案数是多少,这个问题可以采用完全背包进行预处理. 再考虑容斥, ...

  7. BZOJ1042:[HAOI2008]硬币购物(DP,容斥)

    Description 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买si的价值的东西.请问每次有多少种付款方法. Input 第一 ...

  8. P1450 [HAOI2008]硬币购物(完全背包+容斥)

    P1450 [HAOI2008]硬币购物 暴力做法:每次询问跑一遍多重背包. 考虑正解 其实每次跑多重背包都有一部分是被重复算的,浪费了大量时间 考虑先做一遍完全背包 算出$f[i]$表示买价值$i$ ...

  9. 2021.12.06 P1450 [HAOI2008]硬币购物(组合数学+抽屉原理+DP)

    2021.12.06 P1450 [HAOI2008]硬币购物(组合数学+抽屉原理+DP) https://www.luogu.com.cn/problem/P1450 题意: 共有 44 种硬币.面 ...

随机推荐

  1. iOS NSOperation

    iOS NSOperation 一.简介 除了,NSThread和GCD实现多线程,配合使用NSOperation和NSOperationQueue也能实现多线程编程 NSOperation和NSOp ...

  2. Fitness - 07.07

    倒计时177天 运动53分钟,共计8组半,5.5公里.拉伸5分钟. 每组跑步5分钟(6.5KM/h),走路1分钟(5.5KM/h). 感冒+姨妈耽搁了大半月的时间 终于进入第六周的训练了~~!加油~! ...

  3. oracle数据库备份 -九五小庞

    oracle数据库备份

  4. 6 年前,只会 JSP 和 Servlet 就可以找到工作

    这篇文章在去年就已经构思了,不过一直都没有整理出来,今天终于完成了这篇文章,所以发上来给大家看一看,都是一些个人的小感慨,我的观点可能不是非常的完善,大家也可以一起讨论. 找工作之难,难于上青天 五六 ...

  5. 答应我,用了这个jupyter插件,别再重复造轮子了

    1 简介 在使用Python.R等完成日常任务的过程中,可能会经常书写同样或模式相近的同一段代码,譬如每次使用matplotlib绘制图像的时候可以在开头添加下面两行代码来解决中文乱码等显示问题: p ...

  6. H5游戏定制,4大优势助力企业曝光10W+

    H5游戏定制,4大优势助力企业曝光10W+ 移动互联网已成为了人们生活的一部分,普通广告形式已很难吸引用户的眼球,企业要怎样才能将广告更广泛的传播给更多用户呢?根据TOM游戏多年从业经验,为大家分享以 ...

  7. AES字节数组加密解密流程

    AES类时微软MSDN中最常用的加密类,微软官网也有例子,参考链接:https://docs.microsoft.com/zh-cn/dotnet/api/system.security.crypto ...

  8. Table内部实现2

    这一节介绍Lua唯一的数据结构table,相对于大部分语言提供数组和字典两种类型,Lua将其合二为一,颇为精巧的实现了table. table充分体现了Lua语言的特点,用最简练的语法表达丰富的信息, ...

  9. 抓包工具Burp Suite安装步骤(待补充)

    Burp Suite V2.1(破解版)安装步骤:(可以自行下载破解版或汉化版) 百度网盘下载地址: 链接:https://pan.baidu.com/s/1bU5JME3OsEsXrSirTdesR ...

  10. Vue elelment登录验证 简单版

    http.js import axios from 'axios' import { Message, Loading } from 'element-ui'; import router from ...