链接:

文章目录

  • 题目描述
  • 题解:
  • 代码:

题目描述

在网友的国度中共有n种不同面额的货币,第i种货币的面额为a[i],你可以假设每一种货币都有无穷多张。为了方便,我们把货币种数为n、面额数组为a[1…n]的货币系统记作(n,a)。
在一个完善的货币系统中,每一个非负整数的金额x 都应该可以被表示出,即对每一个非负整数x,都存在n个非负整数t[i] 满足a[i] x
t[i] 的和为x。然而,在网友的国度中,货币系统可能是不完善的,即可能存在金额x不能被该货币系统表示出。例如在货币系统n=3,
a=[2,5,9]中,金额1,3就无法被表示出来。
两个货币系统(n,a)和(m,b)是等价的,当且仅当对于任意非负整数x,它要么均可以被两个货币系统表出,要么不能被其中任何一个表出。
现在网友们打算简化一下货币系统。他们希望找到一个货币系统(m,b),满足(m,b)
与原来的货币系统(n,a)等价,且m尽可能的小。他们希望你来协助完成这个艰巨的任务:找到最小的m。

输入描述:

输入的第一行包含一个整数T,表示数据组数。接下来按照如下格式分别给出T组数据。
每组数据的第一行包含一个正整数n。接下来一行包含n个由空格隔开的正整数a[i]。

输出描述:

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

示例1
输入

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

输出

2
5

说明
在第一组数据中,货币系统(2, [3,10])和给出的货币系统(n, a)等价,并可以验证不存在m < 2的等价的货币系统,因此答案为2。
在第二组数据中,可以验证不存在m < n的等价的货币系统,因此答案为5。
备注:
1 <= T <= 20, 1 <= n <= 100, 1 <= a[i] <= 25000

题解:

首先,伤感一分钟,纪念我逝去的oi
我唯一参加过的一届的noip,让我永生难忘
我记得当时考完后,有人戏称为大凯的疑惑
我们来看一下题,先知道什么是货币系统:其实就是这几种不同面值的钱任意组合出其他钱。
如果一个货币系统中有3,有6,那么6就可以省略,因为6可以由两个3组成,这样我们就可以得到一个最小货币系统,这个货币系统是原来的子集,且里面每种面值都是独一无二不可代替的,与原本的是等价关系
我们可以从最小面值开始(因为最小面值肯定无法代替),然后面值依次变大
这样,题意就成了,给你一堆数,每个数可用无数次,问能组成多少数?
这不就是完全背包问题
我们先排序
然后对前i-1个货币进行完全背包,不能被取代的币值也加入背包中,到最后看看有多少

f[i]表示当前这个数x之前的数能不能组成i,如果f[x]等于1,那么说明x可以删了,删掉即可;如果f[x]是0,那么x不能删,就按完全背包的方式更新f数组。(官方题解引入)

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=25002;
int a[320];
bool f[maxn];
int tot=0;
int n;
int main()
{int T;cin>>T;while(T--){tot=0;cin>>n;memset(a,0,sizeof(a));for(int i=1;i<=n;i++)cin>>a[i];sort(a+1,a+1+n);memset(f,0,sizeof(f));f[0]=1;//    cout<<f[0]<<endl;for(int i=1;i<=n;i++){if(!f[a[i]]){tot++;//如果这个货币独一不二,不能被组成,则保留//        printf("j=%d %d\n",a[i],f[a[i]]); }else continue;for(int j=a[i];j<=maxn;j++){if(f[j-a[i]])f[j]=1;else if(f[j])continue; //当前j能否被构造 //               printf("j-a[i]=%d %d\n",j-a[i],f[i-a[i]]); //            printf("j=%d %d\n",j,f[j]); }}cout<<tot<<endl;}return 0;
}

牛客网【每日一题】5月27日题目精讲 货币系统相关推荐

  1. 牛客网 每日一题 7月23日题目精讲—wpy的请求

    来源:牛客网: 文章目录 wpy的请求 题解: 代码: wpy的请求 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K Special Judge ...

  2. 牛客网 【每日一题】7月27日题目精讲—乌龟棋

    来源:牛客网: 乌龟棋 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语言262144K 64bit IO Format: %lld 文章目录 乌龟棋 题目描述 ...

  3. 【每日一题】8月27日题目精讲 Is It A Tree?

    链接:https://ac.nowcoder.com/acm/problem/105905 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 10000K,其他语言2000 ...

  4. 【每日一题】4月27日题目精讲 Removal

    链接: 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K,其他语言1048576K 64bit IO Format: %lld 题目描述 Bobo has a seque ...

  5. 【牛客每日一题】tokitsukaze and Soldier 题目精讲 贪心、优先队列、堆

    链接:https://ac.nowcoder.com/acm/problem/50439 来源:牛客网 ACM在线模板 今天才发现牛客推出了一个每日一题的版块,3月25号就开始了,今天才发现,赶紧补救 ...

  6. 【每日一题】8月28日题目精讲 编号

    [每日一题]8月28日题目精讲 编号 链接:https://ac.nowcoder.com/acm/problem/19925 来源:牛客网 题目描述 你需要给一批商品编号,其中每个编号都是一个7位1 ...

  7. 【每日一题】7月17日题目精讲—BOWL 碗的叠放

    [每日一题]7月17日题目精讲-BOWL 碗的叠放 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld ...

  8. 【每日一题】7月15日题目精讲—生日快乐

    [每日一题]7月15日题目精讲-生日快乐 [SCOI2009]生日快乐 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO For ...

  9. 【每日一题】7月13日题目精讲—Kingdom

    [每日一题]7月13日题目精讲-Kingdom 文章目录 题目描述 题解: 代码: 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 1048576K,其他语言2097152K 64bi ...

最新文章

  1. web 服务器-Nginx
  2. icinga2+postgresql
  3. 暑假爆零欢乐赛SRM08题解
  4. struts2实现拦截器的方法
  5. 【集合框架】JDK1.8源码分析HashSet LinkedHashSet(八)
  6. 红橙Darren视频笔记 AOP简介
  7. 第二章 html标记语言,第二章-认识HTML标签
  8. 记一次Animator状态快速切换问题的解决
  9. mysql gman do_使用MySQL UDFs来调用gearman分布式任务分发系统
  10. 区间比较_双色球82期历史同期比较!断一区间出现两期,其余期次皆未断一区...
  11. .NET简谈互操作(一:开篇介绍)
  12. eclipse j2me 连接 KEmulator模拟器
  13. 计算机固态硬盘安装,电脑安装了固态硬盘,需要如何重装系统?详细的方法教程在这里!...
  14. 永恒之蓝--Windows server 2003R2
  15. python 文件名变量_如何将变量文件名传递给python ete?
  16. Gem5模拟器,详解官网教程Debugging gem5(四)
  17. 戈革:独一无二的学者
  18. matlab print用法,使用Matlab:错误使用 mprint (line 231) Wrong # rnames in mprint,怎么解决...
  19. 赵小楼《天道》《遥远的救世主》解读(89)敬畏之心下的真理
  20. 国产离线语音识别芯片哪家强?未来谁才是语音识别芯片NO.1

热门文章

  1. 扎哈遗作:北京大兴机场,耗资800亿,被英国《卫报》评为新世界七大奇迹!...
  2. oracle asm磁盘头 备份,ASM磁盘头的第三个备份-Physically Addressed Metadata Redundancy
  3. java符号%3e%3e是什么意思,终于找到了!有了它你就可以读懂字节码了!
  4. php curl https 443,PHP CURL支持HTTP、HTTPS 请求亲测可用
  5. python新手入门项目推荐_推荐:一个适合于Python新手的入门练手项目
  6. 河南大学计算机组成原理,河南大学计算机组成原理考点
  7. service层中有某个事物要立马提交_硬货你要的,binder机制来了
  8. C++与C语言中有关数组中元素排序
  9. [Java基础]类和接口的关系
  10. [C++STL]C++实现queue容器适配器