https://onlinejudge.u-aizu.ac.jp/challenges/sources/JOI/Prelim/0654?year=2019
前提知識
解説
https://onlinejudge.u-aizu.ac.jp/status/users/hamayanhamayan/submissions/1/0654/judge/3757763/C++14
貪欲法でも行けそうな感じであるが、DPしておこう。
dp[i] := i番目までのマルバツスタンプの最大使用回数
S[i]!=S[i+1]であれば、マルバツスタンプが使えるので、+1で遷移させる。
int N; string S; int dp[101010]; //--------------------------------------------------------------------------------------------------- void _main() { cin >> N >> S; rep(i, 0, N) { chmax(dp[i + 1], dp[i]); if (i + 1 < N and S[i] != S[i + 1]) chmax(dp[i + 2], dp[i] + 1); } cout << dp[N] << endl; }