Appleman has n cards. Each card has an uppercase letter written on it. Toastman must choose k cards from Appleman's cards. Then Appleman should give Toastman some coins depending on the chosen cards. Formally, for each Toastman's card i you should calculate how much Toastman's cards have the letter equal to letter on ith, then sum up all these quantities, such a number of coins Appleman should give to Toastman.
Given the description of Appleman's cards. What is the maximum number of coins Toastman can get?
The first line contains two integers n and k (1 ≤ k ≤ n ≤ 105). The next line contains n uppercase letters without spaces — the i-th letter describes the i-th card of the Appleman.
Print a single integer – the answer to the problem.
15 10 DZFDFZDFDDDDDDF
82
6 4 YJSNPI
4
In the first test example Toastman can choose nine cards with letter D and one additional card with any letter. For each card with D he will get 9 coins and for the additional card he will get 1 coin.
解题:贪心
代码如下:
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#define LL long long
using namespace std;
int letter[27];
char str[100100];
bool cmp(const int &x,const int &y)
{
return x > y;
}
int main()
{
int n,k;
LL ans;
while(~scanf("%d %d",&n,&k))
{
memset(letter,0,sizeof(letter));
scanf("%s",str);
for(int i = 0; str[i]; i++) letter[str[i]-'A']++;
sort(letter,letter+26,cmp);
for(int i = ans = 0; k && i < 26; i++)
{
ans += 1LL*min(k,letter[i])*min(k,letter[i]);
k -= min(k,letter[i]);
}
cout<<ans<<endl;
}
return 0;
}
本文介绍了一个涉及卡片选择的游戏问题,目标是在限定条件下选择特定数量的卡片以获得最大收益。通过贪心算法解决此问题,并给出具体实现代码。
1338

被折叠的 条评论
为什么被折叠?



