码迷,mamicode.com
首页 > 其他好文 > 详细

BZOJ 4760 Hoof, Paper, Scissors

时间:2017-01-31 15:10:27      阅读:374      评论:0      收藏:0      [点我收藏+]

标签:char   fine   scan   pac   har   efi   pap   main   zoj   

普及组dp.

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 100050
using namespace std;
int n,k,dp[maxn][21][4],p[maxn],map[5][5];
char s[5];
int main()
{
    map[2][1]=map[3][2]=map[1][3]=1;
    scanf("%d%d",&n,&k);
    for (int i=1;i<=n;i++)
    {
        scanf("%s",s);
        if (s[0]==P) p[i]=2;
        else if (s[0]==S) p[i]=3;
        else p[i]=1;    
    }    
    for (int i=1;i<=n;i++)
    {
        dp[i][0][1]=dp[i-1][0][1]+map[1][p[i]];
        dp[i][0][2]=dp[i-1][0][2]+map[2][p[i]];
        dp[i][0][3]=dp[i-1][0][3]+map[3][p[i]];
    }
    for (int i=1;i<=k;i++)
        for (int j=1;j<=n;j++)
        {
            dp[j][i][1]=max(dp[j-1][i][1],max(dp[j-1][i-1][2],dp[j-1][i-1][3]))+map[1][p[j]];
            dp[j][i][2]=max(dp[j-1][i][2],max(dp[j-1][i-1][1],dp[j-1][i-1][3]))+map[2][p[j]];
            dp[j][i][3]=max(dp[j-1][i][3],max(dp[j-1][i-1][1],dp[j-1][i-1][2]))+map[3][p[j]];
        }
    printf("%d\n",max(dp[n][k][1],max(dp[n][k][2],dp[n][k][3])));
    return 0;
}

 

BZOJ 4760 Hoof, Paper, Scissors

标签:char   fine   scan   pac   har   efi   pap   main   zoj   

原文地址:http://www.cnblogs.com/ziliuziliu/p/6358794.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!