zoukankan      html  css  js  c++  java
  • 牛客网-乌龟跑步-(dfs)

    链接:https://ac.nowcoder.com/acm/problem/15294
    来源:牛客网

    题目描述

    有一只乌龟,初始在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
     1 #include<stdio.h>
     2 #include<iostream>
     3 #include<algorithm>
     4 #include<cstring>
     5 #include<math.h>
     6 #include<string>
     7 #define ll long long
     8 #define inf 0x3f3f3f3f
     9 using namespace std;
    10 
    11 string str;
    12 int n,ans,m,len;
    13 bool mp[105][55][205][2];///操作次数 剩余修改次数 位置 方向
    14 ///二维中0表示往回走,1表示往前走
    15 
    16 
    17 void dfs(int step,int s,int x,int d)///操作到哪个指令 剩余修改指令次数 当前位置 方向
    18 {
    19     if(s<0) return ;///dfs递归进来后,修改次数不够
    20     int flag;
    21     if(d==-1)
    22         flag=0;///往回走
    23     else
    24         flag=1;///往前走
    25     if( mp[step][s][x+100][flag] )  return;///如果这套状态之前的dfs中走出现过,直接返回,因为以前已经往不同情况dfs过了
    26     mp[step][s][x + 100][flag] = true;///标记出现过的情况
    27     if(step==len)///指令已经操作完了,可以结束了
    28     {
    29         if(s%2==0) ///如果修改指令的次数还剩偶数次,这个答案是可行的,否则不行
    30             ans=max(ans,abs(x));
    31         return;
    32     }
    33     if( str[step]=='T' )///常规操作是转身
    34     {
    35         dfs(step+1,s-1,x+d,d);///执行操作指令step+1,修改指令后s-1,改成F会走动,方向不变
    36         dfs(step+1,s,x,-d);///执行操作指令step+1, 不修改指令,
    37     }
    38     else
    39     {
    40         dfs(step+1,s,x+d,d);
    41         dfs(step+1,s-1,x,-d);
    42     }
    43 }
    44 
    45 int main()
    46 {
    47     while(cin>>str>>n)/// TF串,F表示前进一格,   T表示转身,但是不走动
    48     {
    49         ///n表示可以修改指令的次数,一定要修改
    50         len=str.size();
    51         memset(mp,false,sizeof(mp));
    52         ans=-1;
    53         dfs(0,n,0,1);///起始方向为正
    54         printf("%d
    ",ans);
    55     }
    56     return 0;
    57 }
  • 相关阅读:
    Adapter的泛型
    Xamarin 页面跳转
    NIPS(Conference and Workshop on Neural Information Processing Systems)
    CVPR(IEEE Conference on Computer Vision and Pattern Recognition)
    Layer Normalization
    Using Fast Weights to Attend to the Recent Past
    A Deep Compositional Framework for Human-like Language Acquisition in Virtual Environment
    Ubuntu之No module named cv2
    Photoshop脚本之eps转换成jpg
    Temporal Ensembling for Semi-Supervised Learning
  • 原文地址:https://www.cnblogs.com/shoulinniao/p/10584699.html
Copyright © 2011-2022 走看看