【BZOJ10492】[HAOI2008]硬币购物

Description

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

Input

  第一行 c1,c2,c3,c4,tot 下面tot行 d1,d2,d3,d4,s,其中di,s<=100000,tot<=1000

Output

  每次的方法数

Sample Input

1 2 5 10 2
3 2 3 1 10
1000 2 2 2 900

Sample Output

4
27

题解:先跑一边完全背包,然后对于每个询问,我们考虑容斥。

ans=总数-至少一种硬币超限的+至少两种硬币超限的-至少三种硬币超限的+四种硬币超限的。

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
typedef long long ll;
int n,sum,flag,s;
ll f[100010];
ll ans;
int c[10],d[10];
inline int rd()
{
int ret=0,f=1; char gc=getchar();
while(gc<'0'||gc>'9') {if(gc=='-')f=-f; gc=getchar();}
while(gc>='0'&&gc<='9') ret=ret*10+gc-'0',gc=getchar();
return ret*f;
}
void dfs(int x)
{
if(x==5)
{
ans+=flag*f[s-sum];
return ;
}
if(sum+c[x]*d[x]<=s) sum+=c[x]*d[x],flag=-flag,dfs(x+1),sum-=c[x]*d[x],flag=-flag;
dfs(x+1);
}
int main()
{
int i,j;
f[0]=1;
for(i=1;i<=4;i++)
{
c[i]=rd();
for(j=c[i];j<=100000;j++) f[j]+=f[j-c[i]];
}
n=rd();
for(i=1;i<=n;i++)
{
for(j=1;j<=4;j++) d[j]=rd()+1;
s=rd(),flag=1,ans=0;
dfs(1);
printf("%lld\n",ans);
}
return 0;
}

最新文章

  1. easyui datagrid 学习
  2. IOS NSInvocation用法简介
  3. NFA和DFA区别
  4. 解决ASP.NET MVC AllowAnonymous属性无效导致无法匿名访问控制器的问题
  5. quartz定时任务时间配置
  6. HDU 3584 Cube
  7. 1、JavaScript基础
  8. 实现jsp页面显示用户登录信息,利用session保存。
  9. A标签中通过href和onclick传递的this对象
  10. 【Tools】ubuntu16.04安装搜狗输入法
  11. mysql命令行导入导出数据库
  12. oracle更改字符集为zhs16GBK
  13. MyBatis学习笔记(二) Executor
  14. chrome浏览器安装不上的惨痛经历
  15. Java&amp;Android TimeUtil ~ A Good Util!
  16. 583. Delete Operation for Two Strings
  17. 追求极致--纯css制作三角、圆形按钮,兼容ie6
  18. php高级开发参考地址
  19. 【Spring学习笔记-MVC-17】Spring MVC之拦截器
  20. java 扁平化输出json所有节点key/value

热门文章

  1. hdu 4741 Save Labman No.004异面直线间的距离既构成最小距离的两个端点
  2. SHUoj 字符串进制转换
  3. postgresql-9.0.18-1-linux.run启动
  4. Using a USB host controller security extension for controlling changes in and auditing USB topology
  5. Servlet 2.4 规范之第四篇:Servlet上下文
  6. npm install Unexpected token in JSON at position XXX
  7. (41)C#异步编程
  8. 洛谷——P1294 高手去散步
  9. 深入理解Atomic原子类
  10. CODECHEF Oct. Challenge 2014 Children Trips