USACO 2017 January Contest, Gold Problem 2. Hoof, Paper, Scissors

来源:互联网 发布:域名备案 坏处 编辑:程序博客网 时间:2024/06/10 14:32
#include<iostream>#include<algorithm>#define MA 100005using namespace std;int dp[MA][25][3];//PSHchar X[3] = { 'P','S','H' };int main(){    freopen("hps.in", "r", stdin);    freopen("hps.out", "w", stdout);    int AA[MA];    int N, K;    scanf("%d %d", &N, &K);    for (int t = 1; t <= N; ++t)    {        getchar();        AA[t] = getchar();    }    for (int t = 1; t <= N; ++t)    {        dp[t][0][0] = dp[t - 1][0][0] + (AA[t] == X[0]);        dp[t][0][1] = dp[t - 1][0][1] + (AA[t] == X[1]);        dp[t][0][2] = dp[t - 1][0][2] + (AA[t] == X[2]);    }    for (int k = 1; k <= K; ++k)    {        for (int t = 1; t <= N; ++t)        {            dp[t][k][0] = max(dp[t - 1][k][0], max(dp[t - 1][k - 1][1], dp[t - 1][k - 1][2])) + (AA[t] == X[0]);            dp[t][k][1] = max(dp[t - 1][k][1], max(dp[t - 1][k - 1][0], dp[t - 1][k - 1][2])) + (AA[t] == X[1]);            dp[t][k][2] = max(dp[t - 1][k][2], max(dp[t - 1][k - 1][1], dp[t - 1][k - 1][0])) + (AA[t] == X[2]);        }    }    printf("%d\n", max(dp[N][K][1], max(dp[N][K][0], dp[N][K][2])));}
0 0
原创粉丝点击