首页 > TAG信息列表 > P5020

P5020 货币系统

一个背包思维题 题目链接 题目思路 对于一个与[n, a]相同的货币系统 如果在a中有可以用其他值表示出来的值 我们就可以将它删去 将所有可以删掉的值删去后我们就可以得到最小的m [m, b]系统 我们可以通过背包来解决这个问题 ac代码 #include <bits/stdc++.h> using namespac

P5020 [NOIP2018 提高组] 货币系统 题解

前情提示:会TLE,吸口氧可以过 先想到:对于一个系统,当且仅当前面的数凑得出来这个数 之后就像一个完全背包了 Code: #include<algorithm> #include<bitset> #include<cctype> #include<cerrno> #include<clocale> #include<cmath> #include<complex> #include<cstdio> #incl

P5020 [NOIP2018 提高组] 货币系统

Problem 自行阅读P5020 货币系统 Solution 不难发现就是去掉可以用别的货币表示的货币。 # include <bits/stdc++.h> using namespace std; const int N = 105; int T; int n,a[N]; int can[25005]; int main(void) { scanf("%d",&T); while(T--) { scanf("

P5020 [NOIP2018 提高组] 货币系统

如果某种面额的货币可以被同样存在于货币系统中的一些面额更小的货币表示出,那么它删去与否等价。 当不能删时,从小到大考虑,因为不能出现面额更小的货币,所以该种面额的货币是必要的。 所以从小到大跑完全背包,每次判断是否必要即可。 尝试了一种二进制拆分(这里其实是倍增)加 bitset 优

【背包DP练习】洛谷 P5020货币系统

洛谷 P5020货币系统 https://www.luogu.com.cn/problem/P5020 思路是把货币从小到大排序,然后按顺序依次完全背包dp,每次dp检查i-1种面值的货币能不能凑出第i种货币 然后去题解看了看发现这是个比较麻烦的做法 . 最后四个样例数据范围比较大,但应该都不是需要时间特别长的,而是卡

「题解」洛谷 P5020 货币系统

题目 P5020 货币系统 简化题意 给你一个集合 \(A\),让你找到元素最少的和集合 \(A\) 等价的集合 \(B\)。 等价指的是用 \(A\) 中元素能表出的使用 \(B\) 中元素也能表出,用 \(A\) 中元素不能表出的使用 \(B\) 中元素也不能表出。 题解 dp。本题的答案就是 \(A\) 中不能被 \(A\) 中其

背包 || NOIP 2018 D1 T2 || Luogu P5020 货币系统

题面:P5020 货币系统 题解: 显然要求的货币系统是当前货币系统的子集时答案会更优,于是考虑从当前货币系统中删数 一个大数如果能被其他小数表示出来,它就可以去掉 把数据排个序去个重,然后直接背包 代码:   1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #defin

Luogu P5020 货币系统

gate 我太菜了,看了标签是背包还不知道是怎么回事qaq 看了下题解,意识到这是个类似素数筛的东西。 感性理解可以发现,原货币系统中能被表示出来的是可以不选的,剩下的就是要选的。所以最小的一定要选,把原货币系统从小到大排序。 枚举原货币系统中的货币a[i],枚举金额j(a[i]+1<j<a[n]) 如

Luogu P5020 货币系统

Luogu P5020 货币系统 先把\(a\)数组排一下序。 从最小的数开始选,显然最小这个数必须选,然后利用完全背包的思想,从\(a_i\)到最大值筛选一遍,将可以组成的打上标记。 在判断后面的数字时,如果已经被标记过了,就不再选,没有被标记过就标记一下,再筛选一次数(即再做一次完全背包)。 #includ

P5020 货币系统

题目描述 在网友的国度中共有 nn 种不同面额的货币,第 ii 种货币的面额为 a[i]a[i],你可以假设每一种货币都有无穷多张。为了方便,我们把货币种数为 nn、面额数组为 a[1..n]a[1..n] 的货币系统记作 (n,a)(n,a)。 在一个完善的货币系统中,每一个非负整数的金额 xx 都应该可

洛谷 P5020 【货币系统】

谁说这一定要排序的,这就是个装满背包嘛 \({f[i]}\) 表示 \(i\) 面值最多能被几张钱表示 则若其不能被表示 \(f[i]=-inf\) 能表示且只有它自己则 \(f[i]=1\) 初始化 \(f[0]=0\) 然后就是裸的背包了呀 状态转移方程为 \(f[i]=max(f[i],f[i-money[j]]+1)\) 就这样 撒花~ 代码如下 #incl