传送门

题目大意:4种面值c[i]的硬币,每种硬币持有d[i]个,问有多少种方法支付出正好N块钱。

可以先预处理出持有硬币无限的情况dp[n],即一个完全背包问题。

之后根据容斥原理,相当于求但是拥有限制,可以参考有限制的不定方程非负整数解的容斥方法,我们设全集为所有在无限情况下凑出S的方案数,属性为,那么就可以对所有补集的并用容斥原理展开进行计算,对于每个是由具有k个不同反向性质组成的集合,对应在容斥式子中的答案就是在无限情况下凑出 的方案数即

最后用全集减去就可以了。

#include<bits/stdc++.h>
#include<unordered_map>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int, int> PII;
typedef pair<double, double> PDD;
//#define int LL
#define inf 0x3f3f3f3f
#define INF 0x3f3f3f3f3f3f3f3f
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#pragma warning(disable :4996)
const int maxn = 100010;
const int mod = 1e9 + 7;
const double eps = 1e-8; LL c[5], N;
LL d[5], S;
LL dp[maxn]; void solve()
{
memset(dp, 0, sizeof(dp));
dp[0] = 1;//价格为0时无限硬币组成之方法数
for (LL i = 1; i <= 4; i++)
{
for (LL j = 0; j <= S; j++)
{
if (j - c[i] >= 0)
dp[j] += dp[j - c[i]];
}
}
LL ans = 0;
for (LL i = 1; i < 16; i++)//枚举集合数1的个数
{
LL tmp = S, bit = 0;//1的个数
for (LL j = 1; j <= 4; j++)
{
if ((i >> (j - 1)) & 1)//这一位1
{
tmp -= c[j] * (d[j] + 1);
bit++;
}
}
if (tmp >= 0)
ans += (bit % 2 ? 1 : -1) * dp[tmp];//用容斥转化为无限制的完全背包情形
}
cout << dp[S] - ans << endl;
} int main()
{
IOS;
for (int i = 1; i <= 4; i++)
cin >> c[i];
cin >> N;
for (int i = 0; i < N; i++)
{
for (int j = 1; j <= 4; j++)
cin >> d[j];
cin >> S;
solve();
} return 0;
}

最新文章

  1. 常用的14种HTTP状态码速查手册
  2. C#中==、Equals、ReferenceEquals的区别
  3. EXT.NET 使用总结(1)
  4. WWDC 2013 Session笔记 - iOS7中的多任务
  5. 抓包工具PowerSniff-0.1
  6. Jquery Validation 多按钮,多表单,分组验证
  7. mount挂载错误
  8. Loadrunner监控Centos
  9. loadView 与 ViewDidLoad
  10. popen()函数详解
  11. React Native出现&quot;Native module cannot be null&quot;问题
  12. 老男孩python学习之作业一购物小程序
  13. jQuery中 对标签元素操作(2)
  14. react+mobx 编写 withStoreHistory 装饰器
  15. kindeditor4.1.11的使用方法
  16. Hbase记录-Hbase介绍
  17. Leetcode题库——40.组合总和II
  18. Python的文件读写
  19. 【转】不要去SeaWorld
  20. 前端常用功能记录(二)—datatables表格(转)

热门文章

  1. Python小练习-购物商城(一部分代码,基于python2.7.5)
  2. Bootstrap 弹出表单
  3. 软件版本GA、Beta、RC含义
  4. errorC2471:cannot update program database vc90.pdb
  5. Java 中使用正则表达式校检IP是否输入正确
  6. zabbix 监控系统概述及部署
  7. WEB前端开发--1(Web前端开发综述)
  8. MySQL5.7 库、表结构、表字段的查询、更改操作
  9. 【HarmonyOS】【Demo】【JAVA UI】 鸿蒙怎么在Webview上添加组件
  10. Linux基础入门笔记