P5020货币系统
这个题是2018提高组真题,是一道看不出是背包的背包题。
题干特别长,甚至有些没看懂。题意为给出一组货币面值,然后从这里面用最少的面值数量取代原先的面值。比如3,6直接用3表示。一开始想到了小凯的疑惑想两两一组求最高不能表示的数,发现根本不是。发现只要看原先的面值是否可以用比他小的面值来替代,那么这个面值就可以取消了,顿时发现这是一个完全背包!容量为最大的数,dp[]表示最多能被几张已有面值代替,cash就表示体积,那么状态转移方程就是dp[j]=dp[j],dp[j-cash[i]]+1;到最后再统计dp[cash[i]]=1的就代表无法被代替,累加输出即可。再在上面进行一个初始化即AC。
1.审题要专心,如果看不懂就结合样例,去上下文进行判断,别羽墨。
2.初始化时,这里的dp[i]不可以初始化为0,因为方程是+1,所以有好多表示不出来的可能会+1,注意长度。
3.要把复杂的动态规划往背包等有模型的上面转化,但也不可以抓住不放。eg.大凯的疑惑
4.memset的长度是字节,如果用的话要*内存。
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
int T;
int n,m;
int cash[];
int dp[];//完全背包
int book[];
int main(){
cin>>T;
for(int i=;i<=T;i++){
cin>>n;
m=;
for(int i=;i<=n;i++){//读入
cin>>cash[i];
}
sort(cash+,cash+n+);//排序
for(int i=;i<=cash[n];i++)
dp[i]=-;
for(int i=;i<=n;i++){
dp[cash[i]]=;
}
for(int i=;i<=n;i++){//完全背包
for(int j=cash[i];j<=cash[n];j++){
dp[j]=max(dp[j],dp[j-cash[i]]+);
}
}
for(int i=;i<=n;i++){
if(dp[cash[i]]==){
//cout<<cash[i]<<endl;
m++;
}
}
cout<<m<<endl;
}
return ;
}
P5020货币系统的更多相关文章
- 洛谷 P5020 货币系统
题目描述 在网友的国度中共有$ n $种不同面额的货币,第 i种货币的面额为 \(a[i]\),你可以假设每一种货币都有无穷多张.为了方便,我们把货币种数为\(n\).面额数组为 \(a[1..n]\ ...
- Luogu P5020 货币系统
Luogu P5020 货币系统 先把$a$数组排一下序. 从最小的数开始选,显然最小这个数必须选,然后利用完全背包的思想,从$a_i$到最大值筛选一遍,将可以组成的打上标记. 在判断后面的数字时,如 ...
- P5020 货币系统
P5020 货币系统 题解 仔细分析... 这道题其实就是求所给数组中有多少个数字不能被该数组中的数字自由组合表示出来 比如样例1 3,10 不能被该集合里的数字表示出来,所以他们组成目标集合 6=3 ...
- 背包 || NOIP 2018 D1 T2 || Luogu P5020 货币系统
题面:P5020 货币系统 题解: 显然要求的货币系统是当前货币系统的子集时答案会更优,于是考虑从当前货币系统中删数 一个大数如果能被其他小数表示出来,它就可以去掉 把数据排个序去个重,然后直接背包 ...
- 【数学】【背包】【NOIP2018】P5020 货币系统
传送门 Description 在网友的国度中共有 \(n\) 种不同面额的货币,第 \(i\) 种货币的面额为 \(a[i]\),你可以假设每一种货币都有无穷多张.为了方便,我们把货币种数为 \(n ...
- [NOIp2018] luogu P5020 货币系统
还在补暑假作业. 题目描述 你有一个由 NNN 种面值的货币组成的货币系统.定义两个货币系统等价,当且仅当 ∀x∈N∗\forall x\in\N^*∀x∈N∗ 要么同时能被两个货币系统表示,要么同时 ...
- P5020 货币系统 题解
原题链接 简要题意: 求一个长度最小的货币系统与给出的货币系统等价.求这个货币系统的长度.等价的定义详见题目,不再赘述. 本文可能用到一些集合论,请放心食用. 算法一 \(n=2\) 时,只需判断两个 ...
- NOIp2018 TG day1 T2暨洛谷P5020 货币系统:题解
题目链接:https://www.luogu.org/problemnew/show/P5020 这道题感觉比较水啊,身为普及组蒟蒻都不费力的做出来了,而且数据范围应该还能大一些,n起码几万几十万都不 ...
- 洛谷P5020 货币系统
题目 题意简化一下就是找题目给定的n个数最多能消掉多少个,我们用个tong[i]来记录i这个数值能不能用小于等于i的货币组合起来,等于1意味着他只能由自己本身的货币组成,等于2说明他可以被其他货币组成 ...
- 洛谷P5020 货币系统 题解 模拟
题目链接:https://www.luogu.org/problem/P5020 这道题目是一道模拟题,但是又有一点多重背包的思想在里面. 首先我们定义一个 vis[i] 来表示和为 i 的情况在之前 ...
随机推荐
- 【leetcode】1227. Airplane Seat Assignment Probability
题目如下: n passengers board an airplane with exactly n seats. The first passenger has lost the ticket a ...
- js支持中文的hex编码 bin2hex (utf-8)
背景: 最近对接接口的时候需要将请求参数转为16进制,因此研究了下这个bin2hex.在js中转16进制 使用的是: str.charCodeAt(i).toString(16); 在遇到中文的时候编 ...
- js-弹框倒计时三秒后,自动关闭???
效果: js: //弹出窗,三秒倒计时 countdown(){ //点击发布按钮后,三秒倒计时开始 $(".btn-pub").click(function(){ var cou ...
- 代码检测docker-sonarqube
gitlab-ce + gitlab-runner + sonarqube,在提交代码时对代码质量进行检测,对不符合要求的代码不允许提交到gitlab version: '3.1' services: ...
- 实战build-react(二)-------引入Ant Design
安装 Ant Design npm install antd --save 或 yarn add antd 注释:https://www.jianshu.com/p/21caf40ee93e(cop ...
- Python黑科技:6行代码轻松搭建FTP服务器
Python 黑科技 六行代码轻松搭建个人FTP服务器 什么是FTP服务器? FTP (File Transfer Protocol) 是一个用于客户端与服务器之间文件的协议.利用FTP我们就能做到在 ...
- Spring Boot教程(二十四)Web应用的统一异常处理
我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况.Spring Boot提供了一个默认的映射:/error,当处理中抛出异常之后,会转到该请求中处理,并且该请求有一个全局的错误页面用来 ...
- sqli-labs(28a)
0X01构造闭合 爆字段数 /?id=') order by 1%23 ?id=') order by 5%23 偷看一下源码 就只过滤了union select 闭合') 那我们来尝试一下 0X02 ...
- 第四周总结 & 实验报告(二)
第四周课程总结 一.String类 1.实例化 (1)直接赋值 public class Xxxx{ public static void main(String args[]){ String a ...
- legend3---Homestead常用操作代码
legend3---Homestead常用操作代码 一.总结 一句话总结: 在虚拟机里面改变文件windows里面也会变,在windows里面改变虚拟机里面也会变,所以可以在windows里面编程或者 ...