BZOJ 1042 硬币购物
先不考虑限制,那么有dp[i]表示i元钱的方案数。
然后考虑限制,发现可以容斥。
其实整个题就是两个容斥原理。感觉出的蛮好的。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 100500
using namespace std;
long long f[maxn],c[],d[],n,s,ans;
void pre_dp()
{
f[]=;
for (long long i=;i<=maxn-;i++)
{
for (long long j=;j<=;j++)
if (i>=c[j]) f[i]+=f[i-c[j]];
for (long long j=;j<=;j++)
for (long long k=j+;k<=;k++)
if (i>=c[j]+c[k]) f[i]-=f[i-c[j]-c[k]];
for (long long j=;j<=;j++)
for (long long k=j+;k<=;k++)
for (long long l=k+;l<=;l++)
if (i>=c[j]+c[k]+c[l]) f[i]+=f[i-c[j]-c[k]-c[l]];
if (i>=c[]+c[]+c[]+c[]) f[i]-=f[i-c[]-c[]-c[]-c[]];
}
}
void work()
{
ans=;ans+=f[s];
for (long long i=;i<=;i++) if (s>=d[i]*c[i]) ans-=f[s-d[i]*c[i]];
for (long long i=;i<=;i++)
for (long long j=i+;j<=;j++)
if (s>=d[i]*c[i]+d[j]*c[j]) ans+=f[s-d[i]*c[i]-d[j]*c[j]];
for (long long i=;i<=;i++)
for (long long j=i+;j<=;j++)
for (long long k=j+;k<=;k++)
if (s>=d[i]*c[i]+d[j]*c[j]+d[k]*c[k]) ans-=f[s-d[i]*c[i]-d[j]*c[j]-d[k]*c[k]];
if (s>=d[]*c[]+d[]*c[]+d[]*c[]+d[]*c[]) ans+=f[s-(d[]*c[]+d[]*c[]+d[]*c[]+d[]*c[])];
printf("%lld\n",ans);
}
int main()
{
for (long long i=;i<=;i++) scanf("%lld",&c[i]);
scanf("%lld",&n);
pre_dp();
for (long long i=;i<=n;i++)
{
for (long long j=;j<=;j++) {scanf("%lld",&d[j]);d[j]++;}
scanf("%lld",&s);
work();
}
return ;
}
BZOJ 1042 硬币购物的更多相关文章
- [BZOJ]1042 硬币购物(HAOI2008)
失踪OJ回归. 小C通过这道题mark一下容斥一类的问题. Description 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买s ...
- BZOJ 1042 硬币购物(完全背包+DP)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1042 题意:给出四种面值的硬币c1,c2,c3,c4.n个询问.每次询问用d1.d2.d ...
- BZOJ 1042 硬币购物(背包DP+容斥原理)
可以看出这是个多重背包,运用单调队列优化可以使每次询问达到O(s).这样总复杂度为O(s*tot). 会TLE. 因为改题的特殊性,每个硬币的币值是不变的,变的只是每次询问的硬币个数. 我们不妨不考虑 ...
- 【BZOJ】【1042】【HAOI2008】硬币购物
DP+容斥原理 sigh……就差一点…… 四种硬币的数量限制就是四个条件,满足条件1的方案集合为A,满足条件2的方案集合为B……我们要求的就是同时满足四个条件的方案集合$A\bigcap B\bigc ...
- Bzoj 1042: [HAOI2008]硬币购物 容斥原理,动态规划,背包dp
1042: [HAOI2008]硬币购物 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1747 Solved: 1015[Submit][Stat ...
- [BZOJ 1042] [HAOI2008] 硬币购物 【DP + 容斥】
题目链接:BZOJ - 1042 题目分析 首先 Orz Hzwer ,代码题解都是看的他的 blog. 这道题首先使用DP预处理,先求出,在不考虑每种硬币个数的限制的情况下,每个钱数有多少种拼凑方案 ...
- bzoj 1042: [HAOI2008]硬币购物 dp+容斥原理
题目链接 1042: [HAOI2008]硬币购物 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1706 Solved: 985[Submit][ ...
- BZOJ 1042: [HAOI2008]硬币购物( 背包dp + 容斥原理 )
先按完全背包做一次dp, dp(x)表示x元的东西有多少种方案, 然后再容斥一下. ---------------------------------------------------------- ...
- BZOJ 1042: [HAOI2008]硬币购物 [容斥原理]
1042: [HAOI2008]硬币购物 题意:4种硬币.面值分别为c1,c2,c3,c4.1000次询问每种硬币di个,凑出\(s\le 10^5\)的方案数 完全背包方案数? 询问太多了 看了题解 ...
随机推荐
- [转载]Badboy使用教程
Badboy-系列教程-资料整理: Badboy自动化测试工具1 界面介绍 http://leafwf.blog.51cto.com/872759/1107079 Badboy自动化测试工具2 录制 ...
- mybatis 简单配置
一.com/book/map包下有两个配置文件: 1.MyBatisConfig.xml <?xml version="1.0" encoding="UTF-8&q ...
- Java 集合系列 04 LinkedList详细介绍(源码解析)和使用示例
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- SpringMvc之handler深入AbstractControllerhe和MultiActionController和内部资源视图解析器
AbstractControllerhe 若处理器继承自AbstractController类,那么该控制器就具有了一些新功能.因为AbstractController类还继承自一个父类WebCont ...
- JavaScript基础---作用域,匿名函数和闭包【转】
匿名函数就是没有名字的函数,闭包是可访问一个函数作用域里变量的函数. 一.匿名函数 //普通函数 function box() { //函数名是 box return 'TT'; } //匿名函数 f ...
- 使用URL读取网络资源
import java.io.InputStream;import java.io.OutputStream;import java.net.URL; import android.os.Bundle ...
- 使用SMSManager短信管理器发送短信
import android.os.Bundle;import android.app.Activity;import android.app.PendingIntent;import android ...
- js克隆
一.有什么用 不破坏原对象的属性 引入一些概念~ 原始数据类型(5种):undefined.null.number.string.boolean 引用数据类型(1种,也叫复合数据类型):object ...
- MONGODB 查询
1,mongoDB 取模运算:db.person.find({index:{$mod:[5,1]}})db.person.find({index:{$not:{$mod:[5,1]}}})2,name ...
- 注册表 ReadBool类型和 ReadInteger 的关系
function TRegistry.ReadBool(const Name: string): Boolean; begin Result := ReadInteger(Name) <> ...