原题下载
答案:
#include <cstdio>
#include <cassert>
#include <algorithm>
using namespace std;
#define NMAX 100000
#define KMAX 20
int moves[NMAX];
int dp[NMAX + 1][KMAX + 1][3];
int main() {
int n, k;
scanf("%d", &n);
scanf("%d", &k);
char s[10];
for (int i = 0; i < n; i++) {
scanf("%s", s);
if (s[0] == 'H') moves[i] = 0;
if (s[0] == 'P') moves[i] = 1;
if (s[0] == 'S') moves[i] = 2;
}
for (int i = 0; i <= n; i++) {
for (int j = 0; j <= k; j++) {
for (int state = 0; state < 3; state++) {
if (i == 0) {
dp[i][j][state] = 0;
} else {
if (j == 0) {
dp[i][j][state] = dp[i-1][j][state] + (moves[i-1] == state ? 1 : 0);
} else {
int ostate1 = (state + 1) % 3;
int ostate2 = (state + 2) % 3;
dp[i][j][state] = max(max(dp[i-1][j][state], dp[i-1][j-1][ostate1]), dp[i-1][j-1][ostate2]) + (moves[i-1] == state ? 1 : 0);
}
}
}
}
}
printf("%d\n", max(max(dp[n][k][0], dp[n][k][1]), dp[n][k][2]));
}
以上就是关于【USACO 2017 January Contest, Gold Problem 2. Hoof, Paper, Scissors】的解答,如需了解学校/赛事/课程动态,可至翰林教育官网获取更多信息。
往期文章阅读推荐:
USACO计算机奥赛如何认证成绩?2026赛季黄金铂金组“定时开赛”规则详解!
USACO计算机奥赛考试语言是什么?C++、Python、Java选哪个效率最高?

© 2026. All Rights Reserved. 沪ICP备2023009024号-1