洛谷 P1450.硬币购物 解题报告
P1450.硬币购物
题目描述
硬币购物一共有\(4\)种硬币。面值分别为\(c1,c2,c3,c4\)。某人去商店买东西,去了\(tot\)次。每次带\(d_i\)枚\(c_i\)硬币,买\(s_i\)的价值的东西。请问每次有多少种付款方法。
输入输出格式
输入格式:
第一行 \(c_1,c_2,c_3,c_4,tot\) 下面\(tot\)行 \(d_1,d_2,d_3,d_4,s\)
输出格式:
每次的方法数
说明
\(di,s<=100000\)
\(tot<=1000\)
很容易想到的,转化成多重背包
dp[0]=1;
for(int i=1;i<=4;i++)
for(int k=s;k>=0;k--)
if(dp[k])
for(int j=1;j<=a[i];j++)
dp[k+j*c[i]]+=dp[k];
printf("%d\n",dp[s]);
结果当然是\(t\)飞啦
如果我们当成完全背包来做的话,当放入物品个数大于限制条件时的一部分是非法的。
假设仅仅针对价值为\(c\)的物品\(i\),存在数量上限\(d\),要凑成的钱数为\(s\).
\(dp[s]\)为装无限个\(i\)时凑成\(s\)的方案数
\(dp[s-c*(d+1)]\)为装无限个\(i\)时凑成\(s-c*(d+1)\)的方案数
相减得到什么? 不仅是装上限为\(d\)个时的方案数吗
然而这只是针对一个物品而言,如果有多个物品呢?
存在多个约束相交的情况,那么根据容斥原理,多的减,少的回加即可。
code:
#include <cstdio>
#define ll long long
const int N=100010;
int c[5],tot,a[5],s;
ll dp[N];
int main()
{
for(int i=1;i<=4;i++) scanf("%d",c+i);
scanf("%d",&tot);
dp[0]=1;
for(int i=1;i<=4;i++)
for(int j=c[i];j<=N;j++)
dp[j]+=dp[j-c[i]];
while(tot--)
{
for(int i=1;i<=4;i++) scanf("%d",a+i);
scanf("%d",&s);
ll ans=0;
for(int i=0;i<=15;i++)
{
int flag=0,t=0;
for(int j=1;j<=4;j++)
if((i>>j-1)&1)
{
t+=c[j]*(a[j]+1);
flag^=1;
}
ll tt=(s>=t?dp[s-t]:0);
ans+=(flag?-tt:tt);
}
printf("%lld\n",ans);
}
return 0;
}
注意这时候枚举子集的方法。
2018.5.4
洛谷 P1450.硬币购物 解题报告的更多相关文章
- 洛谷P1450.硬币购物
传送门 题目大意:4种面值c[i]的硬币,每种硬币持有d[i]个,问有多少种方法支付出正好N块钱. 可以先预处理出持有硬币无限的情况dp[n],即一个完全背包问题. 之后根据容斥原理,相当于求但是拥有 ...
- 洛谷 P1783 海滩防御 解题报告
P1783 海滩防御 题目描述 WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和仓库总是被敌方派人偷袭 ...
- 洛谷 P4597 序列sequence 解题报告
P4597 序列sequence 题目背景 原题\(\tt{cf13c}\)数据加强版 题目描述 给定一个序列,每次操作可以把某个数\(+1\)或\(-1\).要求把序列变成非降数列.而且要求修改后的 ...
- 洛谷1087 FBI树 解题报告
洛谷1087 FBI树 本题地址:http://www.luogu.org/problem/show?pid=1087 题目描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全 ...
- []HAOI2008] 硬币购物 解题报告 ( 完全背包+容斥原理)
题目链接:https://www.luogu.org/problemnew/show/P1450 题目描述: 题解: 如果去掉限制的话,这就是一个完全背包. 我们可以考虑先去掉限制,把这个完全背包做出 ...
- 洛谷 P3349 [ZJOI2016]小星星 解题报告
P3349 [ZJOI2016]小星星 题目描述 小\(Y\)是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品.她有\(n\)颗小星星,用\(m\)条彩色的细线串了起来,每条细线连着两颗小星星. 有一 ...
- 洛谷 P3177 树上染色 解题报告
P3177 [HAOI2015]树上染色 题目描述 有一棵点数为\(N\)的树,树边有边权.给你一个在\(0\) ~ \(N\)之内的正整数\(K\),你要在这棵树中选择\(K\)个点,将其染成黑色, ...
- 洛谷 P4705 玩游戏 解题报告
P4705 玩游戏 题意:给长为\(n\)的\(\{a_i\}\)和长为\(m\)的\(\{b_i\}\),设 \[ f(x)=\sum_{k\ge 0}\sum_{i=1}^n\sum_{j=1}^ ...
- 洛谷 P1272 重建道路 解题报告
P1272 重建道路 题目描述 一场可怕的地震后,人们用\(N\)个牲口棚\((1≤N≤150\),编号\(1..N\))重建了农夫\(John\)的牧场.由于人们没有时间建设多余的道路,所以现在从一 ...
随机推荐
- 面试2——java基础3
21.Http请求的get和post的区别? get:从 指定的资源请求数据.请注意,查询字符串(名称/值对)是在 GET 请求的 URL 中发送的 post:向指定的资源提交要被处理的数据.请注意, ...
- SSL踩坑ERR_SSL_VERSION_OR_CIPHER_MISMATCH
最近公司项目开发了一个微信小程序,并且部署测试OK,由于微信小程序调用的后端接口必须是HTTPS,所以给接口安装了SSL,第一天测试都正常.第二天早上再使用时页面无响应. 抓包发现是后端接口抛出: n ...
- Python 学习 第一篇:数据类型(数字,集合,布尔类型,操作符)
Python语言最常用的对象是变量和常量,常量的值是字面意思,其值是不可变的,变量的值是可变的,例如,123,"上海"是常量,而a=1,a=2,其中a是变量名.内置的核心数据类型有 ...
- .NET Standard库引用导致的FileNotFoundException探究
微软近几年推出.NET Standard,将.NET Framework,.NET Core,Xamarin等目标平台的api进行标准化和统一化,极大地方便了类库编写人员的工作.简单的说,类库编写人员 ...
- linux内核分析程序破解实践报告
- Linux内核分析——字符集总结与分析
一. 设置修改系统.应用默认字符集 1. 查看虚拟机的字符集: 由此可见,该虚拟机的字符集为zh_CN.UTF-8. 2. 查看服务器支持的编码方式 3. 修改字符集类型 上图可见,LANG字符 ...
- 安装mysql解压版时遇到的错误
平常都是使用exe安装mysql,今天使用解压包的,遇到了一系列问题: 环境:win10 mysql版本:mysql-5.7.21-winx64 开始一直用该网页的教程 https://www.cnb ...
- 数学建模-lingo使用
1.安装启动,软件下载地址:http://pc.xzstatic.com/2017/06/LINGO14 .zip.此为免安装版,打开后双击Lingo11.exe即可启动软件. 2.示例:某商品单位成 ...
- Windows10安装ubuntu & caffe GPU版
1.Ubuntu https://www.cnblogs.com/EasonJim/p/7112413.html https://blog.csdn.net/jesse_mx/article/deta ...
- js/jquery禁止页面回退
$(function() { //防止页面后退 history.pushState(null, null, document.URL); window.addEventListener('popsta ...