P5020 货币系统

题目描述

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

在一个完善的货币系统中,每一个非负整数的金额 xx 都应该可以被表示出,即对每一个非负整数 xx,都存在 nn 个非负整数 t[i]t[i] 满足 a[i] \times t[i]a[i]×t[i] 的和为 xx。然而, 在网友的国度中,货币系统可能是不完善的,即可能存在金额 xx 不能被该货币系统表示出。例如在货币系统 n=3n=3, a=[2,5,9]a=[2,5,9] 中,金额 1,31,3 就无法被表示出来。

两个货币系统 (n,a)(n,a) 和 (m,b)(m,b) 是等价的,当且仅当对于任意非负整数 xx,它要么均可以被两个货币系统表出,要么不能被其中任何一个表出。

现在网友们打算简化一下货币系统。他们希望找到一个货币系统 (m,b)(m,b),满足 (m,b)(m,b) 与原来的货币系统 (n,a)(n,a) 等价,且 mm 尽可能的小。他们希望你来协助完成这个艰巨的任务:找到最小的 mm。

输入格式

输入文件的第一行包含一个整数 TT,表示数据的组数。

接下来按照如下格式分别给出 TT 组数据。 每组数据的第一行包含一个正整数 nn。接下来一行包含 nn 个由空格隔开的正整数 a[i]a[i]。

输出格式

输出文件共有 TT 行,对于每组数据,输出一行一个正整数,表示所有与 (n,a)(n,a) 等价的货币系统 (m,b)(m,b)中,最小的 mm。

输入输出样例

输入 #1复制

2
4
3 19 10 6
5
11 29 13 19 17 

输出 #1复制

2
5  

说明/提示

在第一组数据中,货币系统 (2, [3,10])(2,[3,10]) 和给出的货币系统 (n, a)(n,a) 等价,并可以验证不存在 m < 2m<2 的等价的货币系统,因此答案为 22。 在第二组数据中,可以验证不存在 m < nm<n 的等价的货币系统,因此答案为 55。

【数据范围与约定】

对于 100\%100% 的数据,满足 1 ≤ T ≤ 20, n,a[i] ≥ 11≤T≤20,n,a[i]≥1。

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
int f[25001];
int main(){
    int a[101];
    int t,n,ans;
    scanf("%d",&t);
    while(t--){
        scanf("%d",&n);
        ans=n;
        for(int i=1;i<=n;i++){
            scanf("%d",&a[i]);
        }
        sort(a+1,a+1+n);
        memset(f,0,sizeof(f));
        f[0]=1;
        for(int i=1;i<=n;i++){
            if(f[a[i]]){
                ans--;
                continue;
            }
            for(int j=a[i];j<=a[n];j++){
                f[j]=f[j]|f[j-a[i]];
            }
        }
        printf("%d\n",ans);
    }
}

  

原文地址:https://www.cnblogs.com/xiongchongwen/p/11361303.html

时间: 2024-10-01 07:41:51

P5020 货币系统的相关文章

Luogu P5020 货币系统

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

【题解】luogu P5020 货币系统

题目链接 https://www.luogu.org/problem/P5020 玄学题目....可以用筛表,动规,搜索做 筛表 从小到大枚举,筛掉可以表示出来的数,剩下的数就是必须要选的(也就是答案). #include<bits/stdc++.h> using namespace std; int dp[25005], t, a[105], n, sum; int main() { cin >> t; while(t--) { memset(a, 0, sizeof(a));

[2018TG]货币系统

[Time Gate] https://www.luogu.org/problem/P5020 [解题思路] 3 10 19 6等价于3 10 这是因为19=10+3+3+3 6=3+3 看起来我们要把能够被其他钱凑出来的数给筛掉,这样一来剩下的就是我们必须要保留的面值了 那我们可以建一个数组mon[i],来存面值为i的钱能不能被其它面值的钱凑出来 最后再把整个mon跑一遍,看看原货币系统中剩下几个不能被凑出来的钱,这就是答案了 [code] 1 #include <cstdlib> 2 #i

【USACO 2.3.4】货币系统

[描述] 母牛们不但创建了它们自己的政府而且选择了建立了自己的货币系统.由于它们特殊的思考方式,它们对货币的数值感到好奇. 传统地,一个货币系统是由1,5,10,20 或 25,50, 和 100的单位面值组成的. 母牛想知道有多少种不同的方法来用货币系统中的货币来构造一个确定的数值. 举例来说, 使用一个货币系统 {1,2,5,10,...}产生 18单位面值的一些可能的方法是:18x1, 9x2, 8x2+2x1, 3x5+2+1,等等其它. 写一个程序来计算有多少种方法用给定的货币系统来构

洛谷P1474 货币系统 Money Systems

P1474 货币系统 Money Systems 250通过 553提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交  讨论  题解 最新讨论 暂时没有讨论 题目描述 母牛们不但创建了它们自己的政府而且选择了建立了自己的货币系统.由于它们特殊的思考方式,它们对货币的数值感到好奇. 传统地,一个货币系统是由1,5,10,20 或 25,50, 和 100的单位面值组成的. 母牛想知道有多少种不同的方法来用货币系统中的货币来构造一个确定的数值. 举例来说, 使用一个货币系统 {1

P1474 货币系统 Money Systems

P1474 货币系统 Money Systems 题目描述 母牛们不但创建了它们自己的政府而且选择了建立了自己的货币系统.由于它们特殊的思考方式,它们对货币的数值感到好奇. 传统地,一个货币系统是由1,5,10,20 或 25,50, 和 100的单位面值组成的. 母牛想知道有多少种不同的方法来用货币系统中的货币来构造一个确定的数值. 举例来说, 使用一个货币系统 {1,2,5,10,...}产生 18单位面值的一些可能的方法是:18x1, 9x2, 8x2+2x1, 3x5+2+1,等等其它.

【动态规划】货币系统问题

[动态规划]货币系统问题 时间限制: 1 Sec  内存限制: 64 MB 题目描述 货币是在国家或经济体内的物资与服务交换中充当等价物,或是偿还债务的特殊商品,是用作交易媒介.储藏价值和记账单位的一种工具.魔法世界的货币的历史,可以追溯至史前以物易物的阶段,后来经过金属货币.金银.纸币以及金银本位制度,演化至现代的货币体系,现已知魔法世界的货币系统有V种面值,求组成面值为N的货币有多少种方案. 输入 第一行为两个整数V和N,V是货币种类数目,1≤V≤25,N是要构造的面值,1≤N≤1000.第

洛谷 P1474 [USACO2.3]货币系统 Money Systems

题目描述 母牛们不但创建了它们自己的政府而且选择了建立了自己的货币系统.由于它们特殊的思考方式,它们对货币的数值感到好奇. 传统地,一个货币系统是由1,5,10,20 或 25,50, 和 100的单位面值组成的. 母牛想知道有多少种不同的方法来用货币系统中的货币来构造一个确定的数值. 举例来说, 使用一个货币系统 {1,2,5,10,...}产生 18单位面值的一些可能的方法是:18x1, 9x2, 8x2+2x1, 3x5+2+1,等等其它. 写一个程序来计算有多少种方法用给定的货币系统来构

洛谷 P1474 货币系统 Money Systems

P1474 货币系统 Money Systems 题目描述 母牛们不但创建了它们自己的政府而且选择了建立了自己的货币系统.由于它们特殊的思考方式,它们对货币的数值感到好奇. 传统地,一个货币系统是由1,5,10,20 或 25,50, 和 100的单位面值组成的. 母牛想知道有多少种不同的方法来用货币系统中的货币来构造一个确定的数值. 举例来说, 使用一个货币系统 {1,2,5,10,...}产生 18单位面值的一些可能的方法是:18x1, 9x2, 8x2+2x1, 3x5+2+1,等等其它.