乌龟NOI
题目描述
一只乌龟由于智商低下,它只会向左或向右走,不过它会遵循主人小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的更多相关文章
- 【z08】乌龟棋
描述 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起点出发走到终点 ...
- 从一道NOI练习题说递推和递归
一.递推: 所谓递推,简单理解就是推导数列的通项公式.先举一个简单的例子(另一个NOI练习题,但不是这次要解的问题): 楼梯有n(100 > n > 0)阶台阶,上楼时可以一步上1阶,也可 ...
- NOI 动态规划题集
noi 1996 登山 noi 8780 拦截导弹 noi 4977 怪盗基德的滑翔翼 noi 6045 开餐馆 noi 2718 移动路线 noi 2728 摘花生 noi 2985 数字组合 no ...
- noi 6047 分蛋糕
题目链接:http://noi.openjudge.cn/ch0405/6047/ 和Uva1629很类似,不过,可能用记忆化难写一点,状态初始化懒得搞了.就用循环好了. 状态描叙也可以修改,那个题目 ...
- 洛谷P1371 NOI元丹
P1371 NOI元丹 71通过 394提交 题目提供者洛谷OnlineJudge 标签云端评测 难度普及/提高- 提交 讨论 题解 最新讨论 我觉得不需要讨论O long long 不够 没有取 ...
- (转)TortoiseGit(乌龟git)保存用户名密码的方法
返回博客列表 转 TortoiseGit(乌龟git)保存用户名密码的方法 元谷 发布时间: 2014/05/03 23:07 阅读: 20529 收藏: 21 点赞: 12 评论: 3 window ...
- NOI 2015 荷马史诗【BZOJ 4198】k叉Huffman树
抱歉因为NOIP集训,好长时间没再写题解了. NOI 2015也就只有这道题一看就能懂了-- 4198: [Noi2015]荷马史诗 Time Limit: 10 Sec Memory Limit: ...
- NOIP2010提高组乌龟棋 -SilverN
题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起 ...
- NOIP2010乌龟棋[DP 多维状态]
题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起 ...
随机推荐
- Oracle带输入输出参数的存储过程
(一)使用输入参数 需求:在emp_copy中添加一条记录,empno为已有empno的最大值+1,ename不能为空且长度必须大于0,deptno为60. 创建存储过程: create or rep ...
- JSP中声明变量、方法
在JSP页面中声明局部变量,全局变量,方法等 代码示例: <%@ page language="java" contentType="text/html; char ...
- 【C/C++】金币
做了一下去年的题目,今年看起来就没这么难了 从上到下的可以从下到上考虑,会简单很多,dp入门 题目 金币 小招在玩一款游戏,在一个N层高的金字塔上,以金字塔顶为第一层,第i层有i个落点,每个落点有若干 ...
- [V&N2020 公开赛]babybabypwn
写在开头,感谢"影二つ"师傅的指点. 题目的做法思路网上一搜一大把,这篇博客主要记录一下这道题用pwntools写srop的时候,为什么需要省略前面8个字节. 在看题目之前,先来学 ...
- 万字长文入门 Redis 命令、事务、锁、订阅、性能测试
作者:痴者工良 Redis 基本数据类型 Redis 中,常用的数据类型有以下几种: String:字符串类型,二进制安全字符串: Hash:哈希表: List 列表:链表结构,按照插入顺序排序的字符 ...
- UVA10976 分数拆分 Fractions Again?! 题解
Content 给定正整数 \(k\),找到所有的正整数 \(x \geqslant y\),使得 \(\frac{1}{k}=\frac{1}{x}+\frac{1}{y}\). 数据范围:\(0& ...
- mysql联合查询更新数据库例子
mysql联合查询更新数据库例子,用户表,部门表,把用户表中的部门属性更新为部门表的主键UPDATE user_table AS utINNER JOIN belongdept AS bd ON bd ...
- listitems.ListItemCollectionPosition属性为空
SPListItemCollection listitems = list1.GetItems(query);//当执行完上面的代码后,listitems.ListItemCollectionPosi ...
- C++ 11 新特性:函数声明auto
1.概览 1.1 函数名中的箭头,用来表明函数的return type,其使用在函数的返回类型需要通过模板参数进行推导,使用在decltype()和declval()不方便的场景 2.正文 c++ 中 ...
- 分布式系统一致性算法(Paxos)
CAP理论 一致性(Consistency) 可用性(Availability) 分区容错性(网络分区)Partition toleranceCAP理论的特点,就是CAP只能满足其中 ...