multiset
题目背景
ZHY 有很多集合。集合多了,也就成了多重集合。
题目描述
给定一个 多重集合(集合中元素可重复) S S S,请求出一个最大的多重集合 T T T,满足 T T T 是 S S S 的一个 真子集,且对于 T T T 中的每一个元素 i i i,要么 i i i 在 S S S 中没有前驱,要么 i i i 在 S S S 中的前驱 ∈ T \in T ∈T。若有多个大小相同的集合满足条件,则 T T T 为所有元素之和最大的一个。请输出 T T T 的大小和其中元素之和。
一个数 x x x 在一个集合 S S S 中的前驱的定义为所有在 S S S 中且 < x <x <x 的元素 y y y 的最大值。
输入格式
第一行一个正整数 n n n,表示 S S S 的大小。
第二行 n n n 个正整数,表示 S S S 中的元素。
输出格式
一行两个整数。第一个数表示 T T T 的大小,第二个数表示 T T T 的所有元素之和。
样例 #1
样例输入 #1
4
4 5 1 4
样例输出 #1
3 10
样例 #2
样例输入 #2
6
1 4 2 8 5 7
样例输出 #2
5 19
提示
样例 1 1 1 解释
T T T 为 { 5 , 1 , 4 } \{5,1,4\} {5,1,4}。
样例 2 2 2 解释
T T T 为 { 1 , 4 , 2 , 5 , 7 } \{1,4,2,5,7\} {1,4,2,5,7}。
数据范围
对于 30 % 30\% 30% 的数据, n ≤ 15 n \le 15 n≤15。
对于 100 % 100\% 100% 的数据, 2 ≤ n ≤ 1 0 5 2 \le n \le 10^5 2≤n≤105, 1 ≤ S 1 \le S 1≤S 中的元素 ≤ 1 0 9 \le 10^9 ≤109。
Scratch实现
后续
接下来我会不断用scratch来实现信奥比赛中的算法题、Scratch考级编程题实现、白名单赛事考题实现,感兴趣的请关注,我后续将继续分享相关内容