博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj 1042 HAOI2008 硬币购物
阅读量:4649 次
发布时间:2019-06-09

本文共 1791 字,大约阅读时间需要 5 分钟。

    这道题思路是在是神。

    先dp出没有限制时候的方案数。

    dp的时候注意 先循环 1..4 再循环 1..maxs 防止重复。边界是f[0] = 1。 这么基础的背包都忘记了=_=

    接下来处理有重复的问题,容斥原理

    容斥原理说起来很简单,但有一些很神奇的应用,比如这道题。

    最终的答案 = 没有限制的方案 - 其中一种超了限制的方案 + 其中两种超了限制的方案 - 三种超了限制的方案 + 四种超了限制的方案

   ans = f[s] + f[s - c[i]*(d[i]+1)]  - ……  + f[s - c[1]*(d[1]+1)……]

    为什么是 d[i]+1 呢?

    至少用d[i]+1个,剩下的随意,又是不限制的方案数了。

    上代码:

#include 
#include
#include
#include
#include
#define N 100010using namespace std;int c[5], n, d[5], s;long long f[N] = {
0};void make_f(){ f[0] = 1; for (int j = 1; j <= 4; ++j) for (int i = c[j]; i <= N-10; ++i) f[i] += f[i-c[j]];}long long getans(){ long long ans = f[s]; for (int i = 1; i <= 4; ++i) if (s - c[i]*(d[i]+1) >= 0) ans -= f[s - c[i]*(d[i]+1)]; for (int i = 1; i <= 3; ++i) for (int j = i+1; j <= 4; ++j) if (s - c[i]*(d[i]+1) - c[j]*(d[j]+1) >= 0) ans += f[s - c[i]*(d[i]+1) - c[j]*(d[j]+1)]; for (int i = 1; i <= 2; ++i) for (int j = i+1; j <= 3; ++j) for (int k = j+1; k <= 4; ++k) if (s - c[i]*(d[i]+1) - c[j]*(d[j]+1) - c[k]*(d[k]+1) >= 0) ans -= f[s - c[i]*(d[i]+1) - c[j]*(d[j]+1) - c[k]*(d[k]+1)]; if (s - c[1]*(d[1]+1) - c[2]*(d[2]+1) - c[3]*(d[3]+1) - c[4]*(d[4]+1) >= 0) ans += f[s - c[1]*(d[1]+1) - c[2]*(d[2]+1) - c[3]*(d[3]+1) - c[4]*(d[4]+1)]; return ans; }int main(){ for (int i = 1; i <= 4; ++i) scanf("%d", &c[i]); make_f(); scanf("%d", &n); while (n--) { for (int i = 1; i <= 4; ++i) scanf("%d", &d[i]); scanf("%d", &s); printf("%I64d\n", getans()); } return 0;}

 

转载于:https://www.cnblogs.com/handsomeJian/p/4006803.html

你可能感兴趣的文章
CentOS或Redhat上装memcached (包括64位系统)
查看>>
C 字符串数组排序
查看>>
ios开发学习--列表(Table)效果源码分享--系列教程4
查看>>
Modified判断Tedit TMemo类型的文件是否修改过
查看>>
python基础-对象
查看>>
如何使函数不生成执行代码
查看>>
MySQL 数据库设计 笔记与总结(3)物理设计
查看>>
第5周团队作业1:项目建议
查看>>
抠图划线
查看>>
HDU 4897 Little Devil I(树链剖分)(2014 Multi-University Training Contest 4)
查看>>
jmeter 参数化学习笔记
查看>>
Convert the AScii to SAC file
查看>>
PAT (Basic Level) Practise 1002. 写出这个数
查看>>
SxsTrace
查看>>
How to correctly use preventDefault(), stopPropagation(), or return false; on events
查看>>
How to: Update an .edmx File when the Database Changes
查看>>
纯CSS3绘制的猫咪老师——献给喜欢CSS3及《夏目友人帐》的你
查看>>
Mysql卸载
查看>>
Android事件分发机制
查看>>
linux之sleep
查看>>