• 牛客练习赛13 乌龟跑步(DP)


    链接:https://www.nowcoder.com/acm/contest/70/E
    来源:牛客网

    题目描述

    有一只乌龟,初始在0的位置向右跑。
    这只乌龟会依次接到一串指令,指令T表示向后转,指令F表示向前移动一个单位。乌龟不能忽视任何指令。
    现在我们要修改其中正好n个指令(一个指令可以被改多次,一次修改定义为把某一个T变成F或把某一个F变成T)。
    求这只乌龟在结束的时候离起点的最远距离。(假设乌龟最后的位置为x,我们想要abs(x)最大,输出最大的abs(x))

    输入描述:

    第一行一个字符串c表示指令串。c只由F和T构成。
    第二行一个整数n。
    1 <= |c| <= 100, 1 <= n <= 50

    输出描述:

    一个数字表示答案。
    示例1

    输入

    FT
    1

    输出

    2
    示例2

    输入

    FFFTFFF
    2

    输出

    6


    分析:dp[i][j][k][dir]表示到第i个字符,用来j次操作,能否到达k并朝向dir方向,用0和1表示两个方向。

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    char s[111];
    //dp[i][j][k][op]表示到第i个字符,用来j次操作,
    //能否到达k并朝向op方向
    //0和1分别表示两个方向 
    int dp[102][52][210][2];
    int main()
    {
        int M;
        scanf("%s%d",s+1,&M);
        int len=strlen(s+1);
        dp[0][0][100][1]=1;//起始位置为100 
        for(int i=1;i<=len;i++)
        for(int j=0;j<=M;j++)
        for(int k=0;k<=200;k++)
        {
            if(s[i]=='F')//可以前进(可选择前进,后退或转向)
            {
                if(j) dp[i][j][k][1]|=dp[i-1][j-1][k][0];//转向
                if(j) dp[i][j][k][0]|=dp[i-1][j-1][k][1];//转向
                dp[i][j][k+1][1]|=dp[i-1][j][k][1];//前进,不转换 
                dp[i][j][k-1][0]|=dp[i-1][j][k][0];//后退,不转换
                if(j>=2) dp[i][j][k+1][1]|=dp[i-1][j-2][k][1];//反转两次,再前进
                if(j>=2) dp[i][j][k-1][0]|=dp[i-1][j-2][k][0];//后退 
            }
            else
            {
                if(j) dp[i][j][k+1][1]|=dp[i-1][j-1][k][1];//T变成F,再前进 
                if(j) dp[i][j][k-1][0]|=dp[i-1][j-1][k][0];//T变成F,再后退
                dp[i][j][k][1]|=dp[i-1][j][k][0];//转向 
                dp[i][j][k][0]|=dp[i-1][j][k][1];
                if(j>=2) dp[i][j][k][1]|=dp[i-1][j-2][k][0];//反转两次,再转向 
                if(j>=2) dp[i][j][k][0]|=dp[i-1][j-2][k][1];
            }
        }
        int ans=0;
        for(int k=0;k<=200;k++)
        if(dp[len][M][k][0]||dp[len][M][k][1]) ans=max(ans,abs(k-100));
        printf("%d
    ",ans);
        return 0;
    }
    View Code





  • 相关阅读:
    Security headers quick reference Learn more about headers that can keep your site safe and quickly look up the most important details.
    Missing dollar riddle
    Where Did the Other Dollar Go, Jeff?
    proteus 与 keil 联调
    cisco router nat
    router dhcp and dns listen
    配置802.1x在交换机的端口验证设置
    ASAv931安装&初始化及ASDM管理
    S5700与Cisco ACS做802.1x认证
    playwright
  • 原文地址:https://www.cnblogs.com/ACRykl/p/8597593.html
Copyright © 2020-2023  润新知