题目描述

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

输入输出格式

输入格式:

第一行 c1,c2,c3,c4,tot 下面tot行 d1,d2,d3,d4,s

输出格式:

每次的方法数

输入输出样例

输入样例#1:

1 2 5 10 2
3 2 3 1 10
1000 2 2 2 900
输出样例#1:

4
27

说明

di,s<=100000

tot<=1000

题解:

一开始认为要求出一个4元方程的解的个数,用容斥求出所有GCD(a,b,c,d)|si的解

但时间复杂度太高,且条件限制不好做。

后面看到一种解法:

用dp求f[i]为钱数为i时的方案总数

显然f[i]=signma(f[i-c[j]])

复杂度为O(4*s)

再用容斥原理求出所有方案,减去1超出限制,再减去2超限,还有3和4。再加上1,2超限.....

i超出限制的方案为f[si-(d[j]+1)*c[j]]

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
long long c[],d[],tot;
long long f[],ans;
int main()
{long long i,j,s;
cin>>c[]>>c[]>>c[]>>c[]>>tot;
f[]=;
for (i=;i<=;i++)
for (j=c[i];j<=;j++)
{
f[j]+=f[j-c[i]];
}
for (i=;i<=tot;i++)
{
for (j=;j<=;j++)
scanf("%I64d",&d[j]);
scanf("%I64d",&s);
ans=f[s];
if ((d[]+)*c[]<=s)
ans-=f[s-(d[]+)*c[]];
if ((d[]+)*c[]<=s)
ans-=f[s-(d[]+)*c[]];
if ((d[]+)*c[]<=s)
ans-=f[s-(d[]+)*c[]];
if ((d[]+)*c[]<=s)
ans-=f[s-(d[]+)*c[]]; if ((d[]+)*c[]+(d[]+)*c[]<=s)
ans+=f[s-(d[]+)*c[]-(d[]+)*c[]];
if ((d[]+)*c[]+(d[]+)*c[]<=s)
ans+=f[s-(d[]+)*c[]-(d[]+)*c[]];
if ((d[]+)*c[]+(d[]+)*c[]<=s)
ans+=f[s-(d[]+)*c[]-(d[]+)*c[]];
if ((d[]+)*c[]+(d[]+)*c[]<=s)
ans+=f[s-(d[]+)*c[]-(d[]+)*c[]];
if ((d[]+)*c[]+(d[]+)*c[]<=s)
ans+=f[s-(d[]+)*c[]-(d[]+)*c[]];
if ((d[]+)*c[]+(d[]+)*c[]<=s)
ans+=f[s-(d[]+)*c[]-(d[]+)*c[]]; if ((d[]+)*c[]+(d[]+)*c[]+(d[]+)*c[]<=s)
ans-=f[s-(d[]+)*c[]-(d[]+)*c[]-(d[]+)*c[]];
if ((d[]+)*c[]+(d[]+)*c[]+(d[]+)*c[]<=s)
ans-=f[s-(d[]+)*c[]-(d[]+)*c[]-(d[]+)*c[]];
if ((d[]+)*c[]+(d[]+)*c[]+(d[]+)*c[]<=s)
ans-=f[s-(d[]+)*c[]-(d[]+)*c[]-(d[]+)*c[]];
if ((d[]+)*c[]+(d[]+)*c[]+(d[]+)*c[]<=s)
ans-=f[s-(d[]+)*c[]-(d[]+)*c[]-(d[]+)*c[]]; if ((d[]+)*c[]+(d[]+)*c[]+(d[]+)*c[]+(d[]+)*d[]<=s)
ans+=f[s-(d[]+)*c[]-(d[]+)*c[]-(d[]+)*c[]-(d[]+)*d[]];
cout<<ans<<endl;
}
}

[HAOI2008]硬币购物的更多相关文章

  1. Bzoj 1042: [HAOI2008]硬币购物 容斥原理,动态规划,背包dp

    1042: [HAOI2008]硬币购物 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1747  Solved: 1015[Submit][Stat ...

  2. bzoj 1042: [HAOI2008]硬币购物 dp+容斥原理

    题目链接 1042: [HAOI2008]硬币购物 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1706  Solved: 985[Submit][ ...

  3. BZOJ 1042: [HAOI2008]硬币购物( 背包dp + 容斥原理 )

    先按完全背包做一次dp, dp(x)表示x元的东西有多少种方案, 然后再容斥一下. ---------------------------------------------------------- ...

  4. BZOJ 1042: [HAOI2008]硬币购物 [容斥原理]

    1042: [HAOI2008]硬币购物 题意:4种硬币.面值分别为c1,c2,c3,c4.1000次询问每种硬币di个,凑出\(s\le 10^5\)的方案数 完全背包方案数? 询问太多了 看了题解 ...

  5. BZOJ_1042_[HAOI2008]硬币购物_容斥原理+背包

    BZOJ_1042_[HAOI2008]硬币购物_容斥原理+背包 题意: 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买s i的价值 ...

  6. P1450 [HAOI2008]硬币购物(完全背包+容斥)

    P1450 [HAOI2008]硬币购物 暴力做法:每次询问跑一遍多重背包. 考虑正解 其实每次跑多重背包都有一部分是被重复算的,浪费了大量时间 考虑先做一遍完全背包 算出$f[i]$表示买价值$i$ ...

  7. 【BZOJ】1042: [HAOI2008]硬币购物

    1042: [HAOI2008]硬币购物 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3307  Solved: 2075[Submit][Stat ...

  8. BZOJ1042 [HAOI2008]硬币购物 【完全背包 + 容斥】

    1042: [HAOI2008]硬币购物 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2924  Solved: 1802 [Submit][St ...

  9. 【BZOJ1042】[HAOI2008]硬币购物 容斥

    [BZOJ10492][HAOI2008]硬币购物 Description 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买si的价值 ...

  10. BZOJ 1042: [HAOI2008]硬币购物 容斥+背包

    1042: [HAOI2008]硬币购物 Description 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买si的价值的东西.请 ...

随机推荐

  1. 【django之权限组件】

    一.需求分析 RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,一个角色拥有若干权限.这样,就构造成& ...

  2. C语言的第一次博客作业

    题目1:7-3 温度转换 1.代码 int fahr, celsius; fahr=150; celsius=5*(fahr-32)/9; printf("fahr = %d, celsiu ...

  3. 201621123025《Java程序设计》第1周学习总结

    201621123025<Jave程序设计>第一周学习总结 1.本章学习总结 对于java这门课程,如果不会编码那么会很难学会如何去使用它,而在大一的一二学期的专业课--C语言和数据结构我 ...

  4. 【Swift】Runtime动态性分析

    Swift是苹果2014年发布的编程开发语言,可与Objective-C共同运行于Mac OS和iOS平台,用于搭建基于苹果平台的应用程序.Swift已经开源,目前最新版本为2.2.我们知道Objec ...

  5. PM2使用心得

    PM2是node进程管理工具,可以利用它来简化很多node应用管理的繁琐任务,如性能监控.自动重启.负载均衡等,而且使用非常简单. 安装 npm install -g pm2 常用命令 $ npm i ...

  6. 数据库 MYSQL操作(一)

    数据库  MYSQL操作总结(一) 本文主要介绍一下笔者在使用数据库操作的过程中的一些总结,主要的内容包括一下几个内容: 一.mysql 使用基础(主要包括数据库的安装.基本操作等内容) 二.mysq ...

  7. python 之 列表list && 元组tuple

    目录: 列表 列表基本操作 列表的操作符 列表的函数和方法 元组 介绍: 列表是一种可变的有序集合,可以进行访问.添加和删除操作. 元组是一种不可变的有序集合,可以访问. 1.列表的基本操作 创建列表 ...

  8. 使用 BenchmarkDotnet 测试代码性能

    先来点题外话,清明节前把工作辞了(去 tm 的垃圾团队,各种拉帮结派.勾心斗角).这次找工作就得慢慢找了,不能急了,希望能找到个好团队,好岗位吧.顺便这段时间也算是比较闲,也能学习一下和填掉手上的坑. ...

  9. big_menu菜单设置

    1.页面 <script> $(function(){ $('.subnav .content-menu .on').after('<a class="add fb&quo ...

  10. kubernetes入门(07)kubernetes的核心概念(4)

    一.pod 二.Volume volume可以为容器提供持久化存储,比如 三.私有镜像 在使用私有镜像时,需要创建一个docker registry secret,并在容器中引用.创建docker r ...