题目描述

一只乌龟由于智商低下,它只会向左或向右走,不过它会遵循主人小h的指令:F(向前走一步),T(掉头)。

现在小h给出一串指令,由于小h有高超的计算能力,他可以马上知道乌龟最后走到哪里。为了难倒小h,他的好朋友小c就说,现在让你修改其中n个指令,使得乌龟移动到离起点最远的地方。(修改是指“T”变成“F”,或“F”变成“T”,可以对同一个指令多次修改)。乌龟一开始在0点

输入格式
第1行:一个字符串S代表指令

接下来一行一个整数n,表示要修改的指令个数

输出格式
第1行:一个整数,表示乌龟所能移动到的最远距离。

样例
样例输入
FFFTFFF
2
样例输出
6
数据范围与提示
30%的数据

1 ≤ s.size() ≤ 50

1 ≤ n ≤ 20

100%的数据

1 ≤ s.size() ≤ 100

1 ≤ n ≤ 50

题目分析

1.明显,直接dfs一定会超时,所以,一定要+pd
2.要dfs四个地方
(1)目前指针指向为T,然后不用指令
(2)目前指针指向为F,然后用指令
(3)目前指针指向为T,然后用指令
(4)目前指针指向为F,然后不用指令

(5)连续两次一个地方 (很重要)

细节在代码中呈现

#include <bits/stdc++.h>
using namespace std;
char s[1005];
bool vis[115][105][215][3];
int n;
int ans=0;
int len;
int Ads(int x)
{
return x>0?x:-x;
}
void dfs(int zz,int zl,int jl,int fx)
{
if(vis[zz][zl][jl][fx])//
{
return;
}
vis[zz][zl][jl][fx]=1;//记忆化
if (zz>len+1||zl>n) return;//用的指令以超过 ||指针已经超过总长度
if(zl==n&&zz==len+1)//刚好
{
ans=max(ans,Ads(jl));//更新,因为距离可能有负,要加绝对值
return;
}
if(s[zz]=='T')
{
dfs(zz+1,zl+1,jl+((fx==0)?1:-1),fx);//不变方向,即使用指令,改为F,(fx==0)?1:-1意为如果为0,所明现在乌龟方向为正,1反之
}
else
{
dfs(zz+1,zl,jl+((fx==0)?1:-1),fx);//不用指令,
} //两个其实的意义都是不改方向
if(s[zz]=='F')
{
dfs(zz+1,zl+1,jl,((fx==0)?1:0));//用,该方向
}
else
{
dfs(zz+1,zl,jl,((fx==0)?1:0));//不用
}
dfs(zz,zl+2,jl,fx);//连用两次,难点
}
int main()
{
scanf("%s",s+1);
scanf("%d",&n);
len=strlen(s+1);
ans=0;
dfs(1,0,0,0);
printf("%d",ans);
}

乌龟NOI的更多相关文章

  1. 【z08】乌龟棋

    描述 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起点出发走到终点 ...

  2. 从一道NOI练习题说递推和递归

    一.递推: 所谓递推,简单理解就是推导数列的通项公式.先举一个简单的例子(另一个NOI练习题,但不是这次要解的问题): 楼梯有n(100 > n > 0)阶台阶,上楼时可以一步上1阶,也可 ...

  3. NOI 动态规划题集

    noi 1996 登山 noi 8780 拦截导弹 noi 4977 怪盗基德的滑翔翼 noi 6045 开餐馆 noi 2718 移动路线 noi 2728 摘花生 noi 2985 数字组合 no ...

  4. noi 6047 分蛋糕

    题目链接:http://noi.openjudge.cn/ch0405/6047/ 和Uva1629很类似,不过,可能用记忆化难写一点,状态初始化懒得搞了.就用循环好了. 状态描叙也可以修改,那个题目 ...

  5. 洛谷P1371 NOI元丹

    P1371 NOI元丹 71通过 394提交 题目提供者洛谷OnlineJudge 标签云端评测 难度普及/提高- 提交  讨论  题解 最新讨论 我觉得不需要讨论O long long 不够 没有取 ...

  6. (转)TortoiseGit(乌龟git)保存用户名密码的方法

    返回博客列表 转 TortoiseGit(乌龟git)保存用户名密码的方法 元谷 发布时间: 2014/05/03 23:07 阅读: 20529 收藏: 21 点赞: 12 评论: 3 window ...

  7. NOI 2015 荷马史诗【BZOJ 4198】k叉Huffman树

    抱歉因为NOIP集训,好长时间没再写题解了. NOI 2015也就只有这道题一看就能懂了-- 4198: [Noi2015]荷马史诗 Time Limit: 10 Sec  Memory Limit: ...

  8. NOIP2010提高组乌龟棋 -SilverN

    题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起 ...

  9. NOIP2010乌龟棋[DP 多维状态]

    题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起 ...

随机推荐

  1. Thymeleaf+layui+jquery复选框回显

    一.Thymeleaf+layui+jquery复选框回显 基于Thymeleaf模板下的layui+jquery复选框回显,主要是jquery.大致意思是:把数组转成JSON传到前台,再在前台转回数 ...

  2. Consumer方法结合Lambda表达式的应用

    package com.itheima.demo05.Consumer;import java.util.function.Consumer;/** * @author newcityman * @d ...

  3. pipeline post指令

    目录 一.介绍 二.参数说明 三.使用实例 一.介绍 post步骤包含的是在整个pipeline或阶段完成后一些附加的步骤.post步骤是可选的,所以并不包含在声明式pipeline最简结构中,但这并 ...

  4. CF23A You're Given a String... 题解

    Content 给定一个长度为 \(n\) 的字符串,求出至少出现两次的最长子串的长度. 数据范围:\(1\leqslant n\leqslant 100\). Solution 我们直接暴力求出每个 ...

  5. LuoguP6904 [ICPC2015 WF]Amalgamated Artichokes 题解

    Content 已知常数 \(p,a,b,c,d\),我们知道,第 \(k\) 天的股价公式为 \(price_k=p\times(\sin(a\times k+b)+\cos(c\times k+d ...

  6. 分布式系统一致性算法(Paxos)

    CAP理论    一致性(Consistency)    可用性(Availability)    分区容错性(网络分区)Partition toleranceCAP理论的特点,就是CAP只能满足其中 ...

  7. SpringBoot项目bootstrap.yml配置文件不加载

    bootstrap.yml需要引入springcloud的包才会加载 <dependency> <groupId>org.springframework.cloud</g ...

  8. JAVA连接MySQ报错:Caused by: javax.net.ssl.SSLException: Received fatal alert: protocol_version

    Caused by: javax.net.ssl.SSLException: Received fatal alert: protocol_version at sun.security.ssl.Al ...

  9. JAVA中价格金额的存储类型

    在java项目中,我们会遇到价格.金额的数据,这时候我们java中应该用BigDecimal类型,数据库用decimal类型, 长度可以自定义, 如18; 小数点我们项目中用的是2, 保留2位小数. ...

  10. 【LeetCode】104. Maximum Depth of Binary Tree 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 方法一:BFS 方法二:DFS 参考资料 日期 题目 ...