题解P3609 [USACO17JAN]Hoof, Paper, Scissor G

#include<bits/stdc++.h>
using namespace std;
char a[100005];
int dp[100005][3][22];
int main(){
    int n, K;
    cin>>n>>K;
    for(int i = 1; i <= n; i++){
        cin>>a[i];
    }
    for(int i = 1; i <= n; i++){

        for(int j = 0; j < 3; j++){
            for(int k = 0; k < 3; k++){
                if(k == j)  continue;
                for(int hh = 1; hh <= K; hh++){
                    dp[i][j][hh] = max(dp[i-1][k][hh-1], dp[i][j][hh]);
                } 
            }
            for(int k = 0; k <= K; k++){
                dp[i][j][k] = max(dp[i-1][j][k], dp[i][j][k]);
            } 
        }
        if(int(a[i]) == int('H')){
            for(int j = 0; j <= K; j++){
                dp[i][0][j]++;
            }
        }
        else if(int(a[i]) == int('S')){
            for(int j = 0; j <= K; j++){
                dp[i][1][j]++;
            }
        }
        else{
            for(int j = 0; j <= K; j++){
                dp[i][2][j]++;
            }

        }
    }
    int ans = 0;
    for(int i = 0; i < 3; i++){
        for(int j = 0; j <= K; j++){
            ans = max(ans, dp[n][i][j]);
        }
    }
    cout<<ans<<endl;
    return 0;
}
posted @ 2021-10-09 23:14  WRuperD  阅读(0)  评论(0编辑  收藏  举报  来源

本文作者:DIVMonster

本文链接:https://www.cnblogs.com/guangzan/p/12886111.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

这是一条自定义内容

这是一条自定义内容