题目链接:codeforces.com/contest/624/problem/B
题意:有n个字母,每个字母最多出现ai次,但是每个字母的出现次数都要求不一样 问你这个字符串最长多长?
解法:显然从大到小排序,然后贪心就好了,能选就选,不能选就--就行了 注意小心被减到负数了
//CF 624B
#include <bits/stdc++.h>
using namespace std;
int n, a[30];
map <int, int> mp;
int main(){
scanf("%d", &n);
for(int i = 1; i <= n; i++) scanf("%d", &a[i]);
sort(a+1, a+n+1);
long long ans = 0;
for(int i = n; i >= 1; i--){
int xx = a[i];
while(mp[xx]) xx--;
if(xx){
mp[xx] = 1;
ans += xx;
}
}
printf("%lld\n", ans);
return 0;
}