博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 1361 Leyni的机器人
阅读量:6980 次
发布时间:2019-06-27

本文共 4064 字,大约阅读时间需要 13 分钟。

Description

Leyni喜欢机器人,这次,他得到了一个机器人,这个机器人能接受两种命令,"T"(向后转),"F"(前进一步)。

他还得到了一个用于控制这个机器人的指令序列,他计划恰好修改k次这个指令序列(一次只能修改其中一个指令,同一个指令也可以被反复修改)后让机器人去执行,并使这个机器人最终停下的位置离起点尽量远。

他想知道这个机器人最终停下的位置离起点的最远距离,请你帮助他!

Input

本题有多组测试数据,输入的第一行是一个整数T代表着测试数据的数量,接下来是T组测试数据。

对于每组测试数据:

1 包含一个长度不超过100的仅由"T""F"组成的非空字符串s代表着原始指令序列。

2 包含一个整数k (1 ≤ k ≤ 50)代表着Leyni计划恰好修好这个指令序列的次数。

Output

对于每组测试数据:

1 输出这个机器人最终停下的位置离起点的最远距离。

Sample Input

1

TF

1

Sample Output

2

CODE:

当前指令为前进时 :

 a[i][j][k]=max(a[i][j][k],a[i-1][j-L][k]+(k?-1:1));
 b[i][j][k]=min(b[i][j][k],b[i-1][j-L][k]+(k?-1:1));
 当前指令为转身时 :
 a[i][j][k]=max(a[i][j][k],a[i-1][j-L][!k]);
 b[i][j][k]=min(b[i][j][k],b[i-1][j-L][!k]);

View Code
#include
#include
#define max(a,b)(a)>(b)?(a):(b)#define min(a,b)(a)<(b)?(a):(b)int abs(int x){ return x>0?x:-x;}int a[103][55][2];int b[103][55][2];int main(){ char s[104]; int i,k,j,len,t,K,res,res1,res2,res3,res4; scanf("%d",&t); while(t--) { scanf("%s",s); scanf("%d",&K); len=strlen(s); memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); for(i=0;i<=K;i++) { if((s[0]=='F'&&i%2==0)||(s[0]=='T'&&i%2!=0)){ a[1][i][0]=1; a[1][i][1]=-1; b[1][i][0]=1; b[1][i][1]=-1; } } for(i=2;i<=len;i++) { if(s[i-1]=='F') { a[i][0][0]=a[i-1][0][0]+1; a[i][0][1]=a[i-1][0][1]-1; b[i][0][0]=b[i-1][0][0]+1; b[i][0][1]=b[i-1][0][1]-1; for(k=1;k<=K;k++) { res1=a[i-1][k][0]+1; res2=a[i-1][k][1]-1; res3=b[i-1][k][0]+1; res4=b[i-1][k][1]-1; for(j=0;j<=k;j++) { if(j&1) { res1=max(res1,a[i-1][k-j][1]); res2=max(res2,a[i-1][k-j][0]); res3=min(res3,b[i-1][k-j][1]); res4=min(res4,b[i-1][k-j][0]); } else { res1=max(res1,a[i-1][k-j][0]+1); res2=max(res2,a[i-1][k-j][1]-1); res3=min(res3,b[i-1][k-j][0]+1); res4=min(res4,b[i-1][k-j][1]-1); } } a[i][k][0]=res1; a[i][k][1]=res2; b[i][k][0]=res3; b[i][k][1]=res4; } } else { a[i][0][0]=a[i-1][0][1]; a[i][0][1]=a[i-1][0][0]; b[i][0][0]=b[i-1][0][1]; b[i][0][1]=b[i-1][0][0]; for(k=1;k<=K;k++) { res1=a[i-1][k][1]; res2=a[i-1][k][0]; res3=b[i-1][k][1]; res4=b[i-1][k][0]; for(j=0;j<=k;j++) { if(j&1) { res1=max(res1,a[i-1][k-j][0]+1); res2=max(res2,a[i-1][k-j][1]-1); res3=min(res3,b[i-1][k-j][0]+1); res4=min(res4,b[i-1][k-j][1]-1); } else { res1=max(res1,a[i-1][k-j][1]); res2=max(res2,a[i-1][k-j][0]); res3=min(res3,b[i-1][k-j][1]); res4=min(res4,b[i-1][k-j][0]); } } a[i][k][0]=res1; a[i][k][1]=res2; b[i][k][0]=res3; b[i][k][1]=res4; } } } res=0; res=max(a[len][K][0],a[len][K][1]); res=max(res,abs(b[len][K][0])); res=max(res,abs(b[len][K][1])); printf("%d\n",res); } return 0;}

 

转载于:https://www.cnblogs.com/dream-wind/archive/2012/04/18/2454686.html

你可能感兴趣的文章
J2EE开源项目
查看>>
phpstudy多站点配置好后index of/ 列表无法出现的解决
查看>>
70.打印所有Spring boot载入的bean【从零开始学Spring Boot】
查看>>
jvm compile
查看>>
linux内核SMP负载均衡浅析
查看>>
display的block、none、inline属性及解释
查看>>
新的Mac下如何配置开发者账号信息
查看>>
非阻塞socket的连接
查看>>
UITextField的代理方法
查看>>
无人驾驶相关数据集
查看>>
C 的大致运行原理。
查看>>
关于jsp和eclipse服务器端的相关配置和JS的区别
查看>>
JavaScript - 数据类型和变量
查看>>
TCP/IP:IP选项处理
查看>>
【网摘】检测 iframe 是否加载完成
查看>>
cocos2dx 3.x(动态改变精灵的背景图片)
查看>>
cocos2d-x JS 获取当前系统时间(解决屏幕双击点击事件)
查看>>
支付宝接入参考博客
查看>>
学习Spring中遇到关于BeanFactory及测试类的问题
查看>>
现实迷途 第七章 特殊客户
查看>>