题目大意:一个字符串由n种字符构成,现在给定每种字符出现的最多次数,让你构造一个字符串,使得出现过的字符的个数各不相同,求字符串最长长度。
字符串出现次数从高到低排序,能用最多的就用最多的,不能就减一,到0为止。
#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
using namespace std;
int n;
int a[30];
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
sort(a+1,a+1+n);
long long ans=0;
int ji=a[n]+1;
for(int i=n;i>=1;i--){
if(ji>a[i]){
ji=a[i];
}else{
if(ji)ji--;
}
ans+=ji;
}
cout<<ans<<endl;
return 0;
}