洛谷P1450 [HAOI2008]硬币购物
时间:2022-05-08
本文章向大家介绍洛谷P1450 [HAOI2008]硬币购物,主要内容包括题目描述、输入输出格式、输入输出样例、说明、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
题目描述
硬币购物一共有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
[HAOI2008]
首先考虑如果去掉限制,那就是一个裸的完全背包问题
加上限制的话,我们可以考虑先求出没有限制的,再把超出限制的减去
体现到代码上,就是dp[num]减去dp[num-C[i]*(D[i]+1)]
这样每个都减去
但是会有减重的部分,再加回去
#include<iostream>
#include<cstdio>
#define LL long long
using namespace std;
const LL MAXN=1e6+10;
LL C[5],S[5];
inline char nc()
{
static char buf[MAXN],*p1=buf,*p2=buf;
return p1==p2&&(p2=(p1=buf)+fread(buf,1,MAXN,stdin),p1==p2)?EOF:*p1++;
}
inline LL read()
{
char c=nc();LL x=0,f=1;
while(c<'0'||c>'9'){if(c=='-')f=-1;c=nc();}
while(c>='0'&&c<='9'){x=x*10+c-'0';c=nc();}
return x*f;
}
LL dp[MAXN],ans;
void dfs(LL now,LL zt,LL num)
{
if(num<0) return ;
if(now==5)
{
if(zt&1) ans-=dp[num];
else ans+=dp[num];
return ;
}
dfs(now+1,zt+1,num-C[now]*(S[now]+1) );
dfs(now+1,zt,num);
}
int main()
{
#ifdef WIN32
freopen("a.in","r",stdin);
#else
#endif
for(LL i=1;i<=4;i++) C[i]=read();
dp[0]=1;
for(LL i=1;i<=4;i++)
for(LL j=C[i];j<=100001;j++)
dp[j]+=dp[j-C[i]];
LL K=read();
while(K--)
{
for(LL i=1;i<=4;i++) S[i]=read();
LL num=read();
ans=0;
dfs(1,0,num);
printf("%lldn",ans);
}
return 0;
}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法