[贪心] [COGS1025] 数字积木

题目描述 Description

小明有一款新式积木,每个积木上都有一个数,一天小明突发奇想,要是把所有的积木排成一排,所形成的数目最大是多少呢?
你的任务就是读入 n n n个数字积木,求出所能形成的最大数。

输入 Input

输入文件brick.in共 N + 1 N+1 N+1行。
第一行是一个整数 n n n,接下来 n n n行每行是一个正整数

输出 Output

输出文件brick.out共一行。
第一行一个整数,为所能形成的最大整数。

样例输入 Sample Input

3
13
131
343

样例输出 Sample Output

34313131

限制 Limits

对于 30 % 30\% 30%的数据, n ≤ 10 n≤10 n10,每个数 ≤ 1 0 3 ≤10^3 103
对于 50 % 50\% 50%的数据, n ≤ 100 n≤100 n100
对于 100 % 100\% 100%的数据, n ≤ 1000 n≤1000 n1000,每个数 ≤ 1 0 200 ≤10^{200} 10200

23333333第一眼看好诡异的题…
选择贪心思想,因为这几个块组成的数位数是确定的,要组成的数尽可能大,就要使越靠前的数尽可能大。
但是怎么使靠前的数尽可能大?显然根据样例单纯判断数字大小不可取。
样例中: 13 < 131 13<131 13<131,而 13 13 13要放在 131 131 131前面…
于是,考虑两个串 a a a b b b应该如何放入答案…
a a a b b b组合只有两种方式, a + b a+b a+b b + a b+a b+a,那么就可以按 a + b > b + a a+b>b+a a+b>b+a排序,得到的排序后序列即为最优解。
Code

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值