题面:P5020 货币系统 题解: 显然要求的货币系统是当前货币系统的子集时答案会更优,于是考虑从当前货币系统中删数 一个大数如果能被其他小数表示出来,它就可以去掉 把数据排个序去个重,然后直接背包 代码: #include<cstdio> #include<cstring> #include<iostream> #define max(a,b) ((a)>(b)?(a):(b)) using namespace std; inline int rd(){ ,f=…
Luogu P5020 货币系统 先把$a$数组排一下序. 从最小的数开始选,显然最小这个数必须选,然后利用完全背包的思想,从$a_i$到最大值筛选一遍,将可以组成的打上标记. 在判断后面的数字时,如果已经被标记过了,就不再选,没有被标记过就标记一下,再筛选一次数(即再做一次完全背包). #include<bits/stdc++.h> #define N 110 #define A 25010 using namespace std; int t,n,ans,mmax; int a[N]; b…
P5020 货币系统 题解 仔细分析... 这道题其实就是求所给数组中有多少个数字不能被该数组中的数字自由组合表示出来 比如样例1 3,10 不能被该集合里的数字表示出来,所以他们组成目标集合 6=3+3   19=10+6+3 那么问题来了,只知道思路不会写(于是我们翻开题解) solution 1 考虑到对于任意一个数字 x ,如果它能被集合里面的数字表示出来,并且表示它的数字中包含数字 a[i] ,那么 x-a[i] 一定也可以被集合里的数字表示出来 这就涉及到了集合的并集 can[i]…
题目描述 在网友的国度中共有$ n $种不同面额的货币,第 i种货币的面额为 \(a[i]\),你可以假设每一种货币都有无穷多张.为了方便,我们把货币种数为\(n\).面额数组为 \(a[1..n]\)的货币系统记作$ (n,a)$. 在一个完善的货币系统中,每一个非负整数的金额 \(x\) 都应该可以被表示出,即对每一个非负整数 \(x\),都存在 \(n\) 个非负整数\(t[i]\)满足 \(a[i] \times t[i]\) 的和为$ x$.然而, 在网友的国度中,货币系统可能是不完善…
传送门 Description 在网友的国度中共有 \(n\) 种不同面额的货币,第 \(i\) 种货币的面额为 \(a[i]\),你可以假设每一种货币都有无穷多张.为了方便,我们把货币种数为 \(n\).面额数组为 \(a[1..n]\) 的货币系统记作 \((n,a)\). 在一个完善的货币系统中,每一个非负整数的金额 \(x\) 都应该可以被表示出,即对每一个非负整数 \(x\),都存在 \(n\) 个非负整数 \(t[i]\) 满足 \(a[i] \times t[i]\) 的和为 \(…
还在补暑假作业. 题目描述 你有一个由 NNN 种面值的货币组成的货币系统.定义两个货币系统等价,当且仅当 ∀x∈N∗\forall x\in\N^*∀x∈N∗ 要么同时能被两个货币系统表示,要么同时不能被表示.尝试从 NNN 种面值中删除尽量多种,使得删除后得到的新系统与原系统等价.求新系统的面值种数. Solution 一种很显然的想法是,比如 {2,3,5}\{2,3,5\}{2,3,5},因为 2+3=52+3=52+3=5,所以每次我想用 555 的时候我都可以用 2+32+32+3…
目录 @题目描述@ @题解@ @代码@ @题目描述@ 在网友的国度中共有 n 种不同面额的货币,第 i 种货币的面额为 a[i],你可以假设每一种货币都有无穷多张.为了方便,我们把货币种数为 n.面额数组为 a[1..n] 的货币系统记作 (n,a). 在一个完善的货币系统中,每一个非负整数的金额 x 都应该可以被表示出,即对每一个非负整数 x,都存在 n 个非负整数 t[i] 满足 a[i]×t[i] 的和为 x.然而, 在网友的国度中,货币系统可能是不完善的,即可能存在金额 x 不能被该货币…
原题链接 简要题意: 求一个长度最小的货币系统与给出的货币系统等价.求这个货币系统的长度.等价的定义详见题目,不再赘述. 本文可能用到一些集合论,请放心食用. 算法一 \(n=2\) 时,只需判断两个数的倍数关系.有倍数关系则答案为 \(1\),否则为 \(2\). 时间复杂度:\(O(T \times n)\). 实际得分:\(15pts\). 算法二 \(n=3\) 时,首先,如果两个数都是另一个数的倍数,那么答案为 \(1\). 否则,如果仍存在倍数关系,则答案为 \(2\). 其余的情况…
题目链接:https://www.luogu.org/problemnew/show/P5020 这道题感觉比较水啊,身为普及组蒟蒻都不费力的做出来了,而且数据范围应该还能大一些,n起码几万几十万都不一定T.求过~ 分析: 本题是类似完全背包问题,分析样例我们可以得出结论:一种面值的货币如果可以由此系统中的其他货币组合而来,那么它就是可有可无的. 由此我们分析:不妨只在一个系统中做出删减,删掉尽可能多的面值不就行了吗? 对于每个数,我们判断其能否组合出,就成了典型的背包问题. 我们设f[i]f[…
关键: 要使m最小,(m,b)中的数不能用(n,a)中的数表示出来 对于 3  19  10  6 19=10+3+3+3 6=3+3 只有3 和 10 不能被(n,a)中的数表示 所以m=2 只需要计算出存在多少个能被其它数组成的数计算出来就行了. 法一:完全背包 一个数只能被比它小的数字组成而不能被比它大的数字组成. 可以首先对数组排序,然后对于每一个数考虑能不能被它前面的数字所组成. 若x能够被前i个数组成,那么x-a[i]也能被前i个数组成 f[x]表示x能否被组成 则f [ x ] =…