# |
Author |
Problem |
Lang |
Verdict |
Time |
Memory |
Sent |
Judged |
|
46975914 |
Practice:
vjudge5 |
1070J
- 29
|
GNU C++11
|
Accepted
|
124 ms
|
1000 KB
|
2018-12-13 19:33:16 |
2018-12-13 19:33:16 |
|
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <bitset>
using namespace std;
const int N = 200010;
char s[N];
int dp[N];
void solve() {
int n, m, r;
scanf("%d%d%d", &n, &m, &r);
scanf("%s", s);
int cnt[26];
int ans = n * m;
memset(cnt, 0, sizeof(cnt));
for (int i = 0; s[i]; i++) cnt[s[i] - 'A']++;
for (int i = 0; i < 26; i++) {
for (int j = 0; j < n; j++) dp[j] = r + 1;
dp[n] = m;
for (int j = 0; j < 26; j++) {
if (i == j) continue;
for (int k = 0; k <= n; k++) {
dp[k] = max(0, dp[k] - cnt[j]);
if (k + cnt[j] <= n) dp[k] = min(dp[k], dp[k + cnt[j]]);
}
}
for (int j = 0; j <= n; j++)
if (j + dp[j] <= cnt[i]) ans = min(ans, j * dp[j]);
}
printf("%d\n", ans);
}
int main()
{
int t;
scanf("%d", &t);
while (t--) solve();
return 0;
}
Click to see test details