项目场景:
测试点编号 | 测试点时限 | 测试点内存 |
---|---|---|
#1 | 1s | 256m |
#2 | 1s | 256m |
#3 | 1s | 256m |
#4 | 1s | 256m |
#5 | 1s | 256m |
#6 | 1s | 256m |
#7 | 1s | 256m |
#8 | 1s | 256m |
#9 | 1s | 256m |
#10 | 1s | 256m |
问题描述
机器人(rabot) 查看测评数据信息
南海区机器人比赛即将开始,该比赛的的规则如下:
1、将机器人摆放在数轴0的位置。
2、机器人只能向左或向右走,
3、参赛选手可以编写指令:F(向前走一步),T(掉头)。
现在笑笑写了一串指令准备去参赛,由于笑笑有很强的计算能力,他可以马上知道机器人最后会走到哪里。为了难倒笑笑,他的好朋友酷酷就说,现在让你修改其中n个指令,使得机器人移动到离起点最远的地方。(修改是指“T”变成“F”,或“F”变成“T”,可以对同一个指令多次修改)。
输入格式
第一行一个字符串S代表指令
接下来一行一个整数n,表示要修改的指令个数
输出格式
共一行,一个正整数,表示离起点(位置0)最远的距离
输入/输出例子1
输入:
FFFTFFF
2
输出:
6
样例解释
数据范围
1<=len(s)<=100
1<=n<=50
APP 中接收数据代码:
#include<bits/stc++.h>
using namespace std;
string s;
int len,n,ans=0;
bool vis[109][59][209][2];
void dfs(int index,int sum,int ex,int step){
if(vis[idex][sum][ex+100][step+1]) return ;
vis[index][sum][ex+100][step+1]=1;
if(index>s.size()-1||sum>=n) return ;
if(sum==n&&index==s.size()){
ans=max(ans,abs(ex));
return ;
}
if(s[index]=='T'){
dfs(index+1,sum+1,ex+step,step);
dfs(index+1,sum,ex,-step);
}
if(s[index]=='F'){
dfs(index+1,sum+1,ex,-step);
dfs(index+1,sum,ex+step,step);
}
dfs(index,sum+2,ex,step);
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>s>>n;
dfs(0,0,0,1);
printf("%d"ans);
return 0;
}