bzoj1042: [HAOI2008]硬币购物
来源:互联网 发布:linux运维最佳实践 pdf 编辑:程序博客网 时间:2024/06/05 17:03
题面在这里
做法:
暴力dp显然要挂。
我们考虑先完全背包预处理出无限制的方案数。
然后考虑只有一个硬币有限制的情况。我们需要的答案应该等于
那么多种硬币都有限制就用一下容斥原理即可。
/************************************************************* Problem: bzoj 1042 [HAOI2008]硬币购物 User: fengyuan Language: C++ Result: Accepted Time: 44 ms Memory: 2068 kb Submit_Time: 2017-12-14 14:57:58*************************************************************/#include<bits/stdc++.h>#define rep(i, x, y) for (int i = (x); i <= (y); i ++)#define down(i, x, y) for (int i = (x); i >= (y); i --)#define mid ((l+r)/2)#define lc (o<<1)#define rc (o<<1|1)#define pb push_back#define mp make_pair#define PII pair<int, int>#define F first#define S second#define B begin()#define E end()using namespace std;typedef long long LL;//headconst int N = 100010;int n, m;LL f[N];int a[10], b[10];inline LL get(LL x){ if (x > m) return 0; return f[m-x];}int main(){ rep(i, 1, 4) scanf("%d", &a[i]); scanf("%d", &n); f[0] = 1; rep(i, 1, 4) rep(j, a[i], 100000) f[j] += f[j-a[i]]; while (n --){ rep(i, 1, 4) scanf("%d", &b[i]); scanf("%d", &m); LL ret = 0; rep(i, 0, 15){ int t = 0, sum = 0; rep(j, 1, 4) if (((i>>j-1)&1)){ t ++; sum += (b[j]+1)*a[j]; } if (t&1) ret -= get(sum); else ret += get(sum); } printf("%lld\n", ret); } return 0;}
阅读全文
0 0
- BZOJ1042: [HAOI2008]硬币购物
- BZOJ1042: [HAOI2008]硬币购物
- bzoj1042: [HAOI2008]硬币购物
- BZOJ1042: [HAOI2008]硬币购物
- [BZOJ1042] [HAOI2008]硬币购物
- bzoj1042【HAOI2008】硬币购物
- [bzoj1042][HAOI2008]硬币购物
- bzoj1042[HAOI2008]硬币购物
- 【bzoj1042】[HAOI2008]硬币购物
- [bzoj1042][HAOI2008]硬币购物
- bzoj1042: [HAOI2008]硬币购物
- BZOJ1042: [HAOI2008]硬币购物
- bzoj1042 [HAOI2008]硬币购物
- bzoj1042[HAOI2008] 硬币购物
- 【bzoj1042】[HAOI2008]硬币购物
- bzoj1042 [HAOI2008]硬币购物
- 【bzoj1042】[HAOI2008]硬币购物
- bzoj1042: [HAOI2008]硬币购物
- MySQL优化--数据结构的优化
- MySQL · 数据恢复 · undrop-for-innodb
- 【惊雷】Linux下多网卡冗余的实现
- 关于csdn的排名
- 查找——二叉排序树
- bzoj1042: [HAOI2008]硬币购物
- TCP状态和常见攻击方式
- MySQL优化--服务器优化
- TCP 的那些事儿(下)
- IAR-AVR-C编译器的使用B
- ObjectIOStream 对象流 ByteArrayIOStream 数组流 内存流 ZipOutputStream 压缩流
- 硬件产品如何防止抄板
- error: cannot pass objects of non-trivially-copyable type ‘std::string {aka class std::basic_string
- 起跑程序