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

链接:

文章目录

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

题目描述

在网友的国度中共有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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320070.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用.NET Core+Docker 开发微服务

.NET Core发布很久了,因为近几年主要使用java&#xff0c;所以还没使用过.NET Core&#xff0c;今天正好有一个c#写的demo&#xff0c;需要做成服务&#xff0c;不想再转成java来实现&#xff0c;考虑使用.NET CORE来尝下鲜&#xff0c;目标是开发一个微服务&#xff0c;然后部…

【二分】防具布置/秦腾与教学评估(ybtoj 二分-1-2/jzoj 1253/luogu 4403)

正题 ybtoj 二分-1-2 jzoj 1253 luogu 4403 题目大意 给出n组数&#xff1a;si,ei,dis_i,e_i,d_isi​,ei​,di​ 对于每组数据&#xff0c;表示在sis_isi​加1&#xff0c;然后每隔did_idi​就加1&#xff0c;当位置大于eie_iei​时结束 题目保证数字是奇数的位置最多只有1个…

[XSY] 智慧树(线性同余方程组,线段树/树状数组)

智慧树 解决此题有两个要点&#xff1a; 如何判断一个线性同余方程组有没有解如何统计合法子序列数目 先看第2点&#xff1a; 若一个序列是合法的&#xff0c;则这个序列的所有子序列都是合法的 考虑对∀1≤i≤n\forall 1\leq i\leq n∀1≤i≤n&#xff0c;求出以iii为左端点…

P2272-[ZJOI2007]最大半连通子图【tarjan,缩点】

正题 题目链接:https://www.luogu.com.cn/problem/P2272 题目大意 半连通图定义为任意两个点(u,v)(u,v)(u,v)满足uuu可以到vvv或vvv可以到uuu的有向图。 现在给出一张图&#xff0c;求最大半连通子图与其数量。 解题思路 显然一个强连通一定是一个半连通&#xff0c;所以我…

牛客网 【每日一题】5月28日题目精讲 Protecting the Flowers

链接&#xff1a; 文章目录题目描述题意&#xff1a;题解&#xff1a;代码&#xff1a;时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 32768K&#xff0c;其他语言65536K 64bit IO Format: %lld题目描述 Farmer John went to cut some wood and…

【二分】最大均值(ybtoj 二分-1-3)

最大均值 ybtoj 二分-1-3 题目大意 给出一个序列&#xff0c;让你求一个长度不小于m的子序列&#xff0c;使其平均值最大 输入样例 10 6 6 4 2 10 3 8 5 9 4 1输出样例 6500数据范围 1⩽L⩽N⩽1051\leqslant L \leqslant N \leqslant 10^51⩽L⩽N⩽105 Ai⩽2000A_i\leqs…

Steeltoe之Config客户端篇

Steeltoe是一款开源项目&#xff0c;其目标是选取源自Netflix及其它公司的工具&#xff0c;使它们能够运用于.NET社区。它不仅可以在.NET Core上&#xff0c;也可以在.NET Framework 4.X以上使用。此外&#xff0c;大多数的组件能够同时运行在本地机器及Cloud Foundry(一个领先…

[XSY] 绿色(圆方树、树形DP、树上差分)

绿色 题意简述 题解 首先&#xff0c;每次修改完点权后&#xff0c;重新考虑一遍所有路径显然是不现实的&#xff0c;所以我们考虑求出经过每个点的两端同色的简单路径数&#xff0c;这样权值和容易统计和修改。 接下来分析仙人掌上的简单路径性质。一条简单路径上的边&…

P4309-[TJOI2013]最长上升子序列【Splay】

正题 题目链接:https://www.luogu.com.cn/problem/P4309 题目大意 nnn次&#xff0c;第iii次在第xix_ixi​个数字后面插入iii然后询问最长上升子序列长度。 解题思路 因为是插入所以考虑用SplaySplaySplay维护&#xff0c;因为从小到大插入&#xff0c;其实每次就是找一个在x…

牛客网 【每日一题】5月29日 管道取珠

链接&#xff1a; 文章目录题目描述题意&#xff1a;题解&#xff1a;代码&#xff1a;时间限制&#xff1a;C/C 2秒&#xff0c;其他语言4秒 空间限制&#xff1a;C/C 524288K&#xff0c;其他语言1048576K 64bit IO Format: %lld题目描述 管道取珠是小X很喜欢的一款游戏。在本…

【dfs】拔河比赛(ybtoj dfs-1-1)

拔河比赛 ybtoj dfs-1-1 题目大意 给你n个数&#xff0c;让你分成两堆&#xff0c;使其数量相差不大于1&#xff0c;问数值相差最小是多少 输入样例 1 3 55 50 100输出样例 5数据范围 1⩽T⩽501\leqslant T \leqslant 501⩽T⩽50 2⩽N⩽202\leqslant N\leqslant 202⩽N⩽…

半天搭建你的Jenkins持续集成与自动化部署系统

前言相信每一位程序员都经历过深夜加班上线的痛苦&#xff01;而作为一个加班上线如家常便饭的码农&#xff0c;更是深感其痛。由于我们所做的系统业务复杂&#xff0c;系统庞大&#xff0c;设计到多个系统之间的合作&#xff0c;而核心系统更是采用分布式系统架构&#xff0c;…

牛客网 【每日一题】6月10日 失衡天平

链接&#xff1a; 文章目录题目描述题解&#xff1a;代码&#xff1a;时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 终于Alice走出了大魔王的陷阱&#xff0c;可是现在傻傻…

P3345-[ZJOI2015]幻想乡战略游戏【点分树,RMQ】

正题 题目链接:https://www.luogu.com.cn/problem/P3345 题目大意 nnn个点的一棵树&#xff0c;每次修改一个点的点权后询问一个xxx最小化∑y1ndis(x,y)∗dy\sum_{y1}^ndis(x,y)*d_yy1∑n​dis(x,y)∗dy​ 解题思路 先是构建一个点分树&#xff0c;然后考虑如何计算答案。 我…

[XSY]Illyasviel的图游戏(博弈论)

Illyasviel的图游戏 除了1号点和n号点每个点度数小于等于2&#xff0c;因此1 到 n 的所有简单路径互不相交。 在结束游戏前的最后一步一定是剩下一条 1 到 n 的路径&#xff0c;并且路径上的权值全都是1。 游戏总步数确定&#xff0c;如果剩下的最后一条路径确定了&#xff…

【dfs】数独游戏(ybtoj dfs-1-2)

数独游戏 ybtoj dfs-1-3 题目大意 给出一个未完成的数独&#xff0c;让你完成它 输入样例 4.....8.5.3..........7......2.....6.....8.4......1.......6.3.7.5..2.....1.4...... ......52..8.4......3...9...5.1...6..2..7........3.....6...1..........7.4.......3. end…

数学知识总结——矩阵

1 矩阵及其运算 由mnm\times nmn个数aija_{ij}aij​排成的mmm行nnn列的数表称为mmm行nnn列的矩阵&#xff0c;简称mnm\times nmn矩阵。记作&#xff1a; A[a11a12...a1na21a22...a2n............am1am2...amn]A\begin{bmatrix} a_{11} & a_{12} & ...&a_{1n}\\ a_…

.Net业务搭配实用技术栈

前言昨天有篇文章在讨论webform的设计思路&#xff0c;我已经四五年不用webform了&#xff0c;虽然它也提供了HttpModule和httphandle来处理请求&#xff0c;提供了一般处理程序ashx来简化处理流程&#xff0c;但依然会想起它的form runatserver&#xff0c;想起注册客户端脚本…

【dfs】虫食算(ybtoj dfs-1-3)

虫食算 ybtoj dfs-1-3 题目大意 给出一个如ABC的N进制的式子&#xff0c;现在知道某些位上的数字是相同的&#xff0c;让你求出这个式子 样例输入 5 ABCED BDACE EBBAA样例输出 1 0 3 4 2数据范围 1⩽N⩽261\leqslant N \leqslant 261⩽N⩽26 解题思路 从低位到高位枚举…

牛客网 【每日一题】6月11日题目精讲 背包

链接&#xff1a; 文章目录题目描述题解&#xff1a;代码:题目描述 Applese有1个容量为v的背包&#xff0c;有n个物品&#xff0c;每一个物品有一个价值ai&#xff0c;以及一个大小bi 然后他对此提出了自己的疑问&#xff0c;如果我不要装的物品装的价值最大&#xff0c;只是一…