题目链接:codeforces 462B
题意:
给 n 个字母,取 k 个,价值为 取字母的数量的平方,求最大价值
题解:
贪心,先取字母数量最多的
AC代码
c++
#include <bits/stdc++.h>
using namespace std;
int main(){
int n, k, a[30];
cin >> n >> k;
string s;
cin >> s;
memset(a, 0, sizeof(a));
int len = s.size();
for(int i = 0; i < len; i++){
a[s[i]-'A']++;
}
sort(a, a+26);
long long ans = 0;
for(int i = 25; i >= 0, k > 0; i--){
long long u = min(k, a[i]);
ans = ans + u * u;
k = k - u;
}
cout << ans << endl;
return 0;
}
php
<?php
$cin = fopen("php://stdin", "r");
$s = fgets($cin);
$u = explode(' ', $s);
$n = intval($u[0]);
$k = intval($u[1]);
$s = fgets($cin);
$s = str_replace(PHP_EOL, '', $s);
$ans = 0;
$a = array();
for($i = 0; $i < 26; $i++){
$a[$i] = 0;
}
for($i = 0; $i < strlen($s); $i++){
$a[ord($s[$i])-ord('A')]++;
}
sort($a, SORT_NUMERIC);
for($i = 25; $i >= 0, $k > 0; $i--){
$u = min($k, $a[$i]);
$ans = $ans + $u * $u;
$k = $k - $u;
if($i < 0){
break;
}
}
print_r($ans."\n");
fclose($cin);
?>
本文解析了 Codeforces 平台上的题目 462B,介绍了如何通过贪心算法选取字母以获得最大价值的问题,并提供了 C++ 和 PHP 的实现代码。

1249

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



