硬币购物 [Codevs1869,Bzoj1042,HAOI2008]
来源:互联网 发布:查了啊高清网络电视 编辑:程序博客网 时间:2024/05/17 07:52
题目地址请点击 ——
硬币购物
【问题描述】
硬币购物一共有
面值分别为
某人去商店买东西,去了
每次带
请问每次有多少种付款方法。
【输入描述】
第一行
下面
【输出描述】
每次的方法数。
【输入样例】
1 2 5 10 2
3 2 3 1 10
1000 2 2 2 900
【输出样例】
4
27
【Solution】
参见Byvoid 。
动态规划+容斥原理:
设
则状态转移方程为:
为避免方案重复,要以
接下来对于每次询问,奇妙的解法如下:
根据容斥原理,答案为 得到面值
当第
当且仅当
其余情况类似,每次询问只用问
【Code】
- #include <iostream>
- #include <cstdio>
- #define LL long long
- using namespace std;
- LL c[10],tot,ans,tmp;
- LL f[100010];
- int main(){
- scanf(”%lld%lld%lld%lld%lld”,&c[1],&c[2],&c[3],&c[4],&tot);
- f[0]=1;
- for(LL i=1;i<=4;i++)
- for(LL j=c[i];j<=100000;j++)f[j]+=f[j-c[i]];
- for(LL i=1;i<=tot;i++){
- LL d1,d2,d3,d4,s;
- scanf(”%lld%lld%lld%lld%lld”,&d1,&d2,&d3,&d4,&s);
- ans=f[s];
- // ———————————————————-
- tmp=0;
- if(s-(d1+1)*c[1]>=0)tmp+=f[s-(d1+1)*c[1]];
- if(s-(d2+1)*c[2]>=0)tmp+=f[s-(d2+1)*c[2]];
- if(s-(d3+1)*c[3]>=0)tmp+=f[s-(d3+1)*c[3]];
- if(s-(d4+1)*c[4]>=0)tmp+=f[s-(d4+1)*c[4]];
- ans-=tmp;
- // ———————————————————-
- tmp=0;
- if(s-(d1+1)*c[1]-(d2+1)*c[2]>=0)tmp+=f[s-(d1+1)*c[1]-(d2+1)*c[2]];
- if(s-(d1+1)*c[1]-(d3+1)*c[3]>=0)tmp+=f[s-(d1+1)*c[1]-(d3+1)*c[3]];
- if(s-(d1+1)*c[1]-(d4+1)*c[4]>=0)tmp+=f[s-(d1+1)*c[1]-(d4+1)*c[4]];
- if(s-(d2+1)*c[2]-(d3+1)*c[3]>=0)tmp+=f[s-(d2+1)*c[2]-(d3+1)*c[3]];
- if(s-(d2+1)*c[2]-(d4+1)*c[4]>=0)tmp+=f[s-(d2+1)*c[2]-(d4+1)*c[4]];
- if(s-(d3+1)*c[3]-(d4+1)*c[4]>=0)tmp+=f[s-(d3+1)*c[3]-(d4+1)*c[4]];
- ans+=tmp;
- // ———————————————————-
- tmp=0;
- if(s-(d1+1)*c[1]-(d2+1)*c[2]-(d3+1)*c[3]>=0)tmp+=f[s-(d1+1)*c[1]-(d2+1)*c[2]-(d3+1)*c[3]];
- if(s-(d1+1)*c[1]-(d2+1)*c[2]-(d4+1)*c[4]>=0)tmp+=f[s-(d1+1)*c[1]-(d2+1)*c[2]-(d4+1)*c[4]];
- if(s-(d1+1)*c[1]-(d3+1)*c[3]-(d4+1)*c[4]>=0)tmp+=f[s-(d1+1)*c[1]-(d3+1)*c[3]-(d4+1)*c[4]];
- if(s-(d2+1)*c[2]-(d3+1)*c[3]-(d4+1)*c[4]>=0)tmp+=f[s-(d2+1)*c[2]-(d3+1)*c[3]-(d4+1)*c[4]];
- ans-=tmp;
- // ———————————————————-
- tmp=0;
- if(s-(d1+1)*c[1]-(d2+1)*c[2]-(d3+1)*c[3]-(d4+1)*c[4]>=0)tmp+=f[s-(d1+1)*c[1]-(d2+1)*c[2]-(d3+1)*c[3]-(d4+1)*c[4]];
- ans+=tmp;
- // ———————————————————-
- printf(”%lld\n”,ans);
- }
- return 0;
- }
- 硬币购物 [Codevs1869,Bzoj1042,HAOI2008]
- 硬币购物[HAOI2008][Codevs1869]
- 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]硬币购物
- Linux 1day
- asp.net中的相关知识
- 【一天一道LeetCode】#70. Climbing Stairs
- 星尘计算器开发日志
- DP 1016
- 硬币购物 [Codevs1869,Bzoj1042,HAOI2008]
- MySql命令导入导出数据库
- 利用cgi 实现简易网页加法计算器功能
- 模拟登录
- #严重: Exception loading sessions from persistent storage
- 数据加密(MD5,DES,RSA)简析
- 高性能Mysql主从架构的复制原理及配置详解
- Java千百问_07JVM架构(015)_XmnXmsXmxXss有什么区别
- springmvc--为什么用它