Codeforces 462B Appleman and Card Game
题目大意:有N张牌,从中选择K张,如果对于一张选中的牌来说,得分加上选出牌中面值与该牌相同的牌的数量。求最大得分。
解题思路:贪心。从牌数多的面值开始选。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 1e5+5;
typedef long long ll;
int N, K, c[50];
char s[maxn];
int main () {
scanf("%d%d%s", &N, &K, s);
for (int i = 0; i < N; i++)
c[s[i] - 'A']++;
sort(c, c + 26);
ll ans = 0;
for (int i = 25; i >= 0; i--) {
int cnt = min(K, c[i]);
K -= cnt;
ans += 1LL * cnt * cnt;
}
printf("%lld\n", ans);
return 0;
}