Description

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

题解:

容斥原理公式:(源自百度百科)

十分喜欢这道题,真的非常巧妙.
不加限制,该题会变得特别模板.
有限制后,似乎正着求有些困难,我们就考虑反着求,即简单容斥一下.
我们先求出不加限制的方案数,再将不合法的方案数依次减掉.
考虑容斥原理:
总方案 - $\sum$ 1个不合法 + $\sum$ 2个不合法 - $\sum$ 3个不合法......
假设不加限制的总个数为 $N$ ,第一物品的限制为 $d$ (一共4个物品),那么当我们拿 $d+1$,$d+2$.... 个物品的时候开始不合法.
也就是说,不合法的情况下,我们至少拿 $d+1$ 个1物品,剩下的由 1,2,3,4随便拼凑.
而剩下的四个物品随便拼凑不就是 $DP[N-(d+1)*val_{1}]$ 嘛......
其余情况同理.

Code:

#include<bits/stdc++.h>
#define setIO(s) freopen(s".in","r",stdin)
#define maxn 1000000
#define N 200000
#define ll long long
using namespace std;
int c[5],d[5];
ll dp[maxn];
int main(){
//setIO("input");
for(int i=0;i<4;++i) scanf("%d",&c[i]);
dp[0]=1;
for(int i=0;i<4;++i) for(int j=c[i];j<=N;++j) dp[j]+=dp[j-c[i]];
int T;
scanf("%d",&T);
while(T--){
for(int i=0;i<4;++i) scanf("%d",&d[i]);
int res;
scanf("%d",&res);
ll ans=0;
for(int i=0;i<16;++i){
int cnt=0,cur=res;
for(int j=0;j<4;++j) if((i>>j)&1) cnt^=1,cur-=(d[j]+1)*c[j];
if(cur<0) continue;
if(cnt) ans-=dp[cur]; else ans+=dp[cur];
}
printf("%lld\n",ans);
}
return 0;
}

  

BZOJ 1042: [HAOI2008]硬币购物 容斥原理_背包_好题的更多相关文章

  1. Bzoj 1042: [HAOI2008]硬币购物 容斥原理,动态规划,背包dp

    1042: [HAOI2008]硬币购物 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1747  Solved: 1015[Submit][Stat ...

  2. BZOJ 1042: [HAOI2008]硬币购物 [容斥原理]

    1042: [HAOI2008]硬币购物 题意:4种硬币.面值分别为c1,c2,c3,c4.1000次询问每种硬币di个,凑出\(s\le 10^5\)的方案数 完全背包方案数? 询问太多了 看了题解 ...

  3. BZOJ 1042: [HAOI2008]硬币购物 容斥+背包

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

  4. BZOJ 1042: [HAOI2008]硬币购物( 背包dp + 容斥原理 )

    先按完全背包做一次dp, dp(x)表示x元的东西有多少种方案, 然后再容斥一下. ---------------------------------------------------------- ...

  5. bzoj 1042: [HAOI2008]硬币购物 dp+容斥原理

    题目链接 1042: [HAOI2008]硬币购物 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1706  Solved: 985[Submit][ ...

  6. BZOJ 1042 [HAOI2008]硬币购物(完全背包+容斥)

    题意: 4种硬币买价值为V的商品,每种硬币有numi个,问有多少种买法 1000次询问,numi<1e5 思路: 完全背包计算出没有numi限制下的买法, 然后答案为dp[V]-(s1+s2+s ...

  7. BZOJ 1042: [HAOI2008]硬币购物 (详解)(背包&容斥原理)

    题面:https://www.cnblogs.com/fu3638/p/6759919.html 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚 ...

  8. [BZOJ 1042] [HAOI2008] 硬币购物 【DP + 容斥】

    题目链接:BZOJ - 1042 题目分析 首先 Orz Hzwer ,代码题解都是看的他的 blog. 这道题首先使用DP预处理,先求出,在不考虑每种硬币个数的限制的情况下,每个钱数有多少种拼凑方案 ...

  9. [bzoj 1042][HAOI2008]硬币购物(用容斥原理弄背包)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1042 分析: 解法很巧妙,用f[i]表示四种硬币A.B.C.D的数量不考虑的情况下弄成 ...

随机推荐

  1. NLTK学习笔记(二):文本、语料资源和WordNet汇总

    目录 语料库基本函数表 文本语料库分类 常见语料库及其用法 载入自定义语料库 词典资源 停用词语料库 WordNet面向语义的英语字典 语义相似度 语料库基本函数表 示例 描述 fileids() 语 ...

  2. 9.在idea中创建Maven项目

    1.新建maven WEB项目 打开-File-New-Project 点击NEXT 2.选择项目组,并给项目命名 3.选择maven路径 添加的配置为 archetypeCatalog=intern ...

  3. CodeForces - 340 C - Tourist Problem

    先上题目: A - Tourist Problem Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & ...

  4. 洛谷—— P1784 数独

    https://www.luogu.org/problem/show?pid=1784 题目描述 数独是根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行.每一列.每一个粗线宫内的数字 ...

  5. Windows 10不能正常打开开始菜单问题修复

    1.可以尝试通过命令重新注注册Windows Store app: powershell -ExecutionPolicy Unrestricted Add-AppxPackage -DisableD ...

  6. 程序错误通常有2种,一种是运行时错误,这种错误ide会抛出异常,我们可以根据异常寻找问题.

    1.程序错误通常有2种,一种是运行时错误,这种错误ide会抛出异常,我们可以根据异常寻找问题. 2.可以根据异常寻找问题. 3.可以根据异常寻找问题

  7. [jQuery]data-不能乱用啊

    使用jQuery easy ui做一个拖拽的功能 因为在要拖拽的元素中使用了date-options={OPTIONS}来存数据,因为没有替换{OPTIONS} jQuery貌似把我的}识别成方法的} ...

  8. Web端即时通讯、消息推送的实现

    https://blog.csdn.net/DeepLies/article/details/77726823

  9. Possible multiple enumeration of IEnumerable

    https://www.jetbrains.com/help/resharper/2016.1/PossibleMultipleEnumeration.html Consider the follow ...

  10. hdoj--3339--In Action(最短路+01背包)

    In Action Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...