电子龟的行动,是沿着直线左右走动的。他能够接受两种指令,“T”(向后转,即如果面向左,改成向右;否则就向左)和“F”(向当前面朝的方向往前移动一个单位距离)。

现在给出一串指令,让电子龟来执行。你必须改动n次指令,一次改变一个(一个指令可以改动多次)。使得电子龟执行完所有的指令后,离起始点最远。

样例解释:

在第一个样例中,最好方案是把“T”变成“F”,最远距离为2。

在第二个样例中,最好方案是把第四个变成“F”,然后把最后一个或者第一个变成“T”。

收起

 

输入

单组测试数据
第一行是一个字符串S,代表原始的指令串,只包含'T','F'字符。(1≤|S|≤100)
第二行是一个整数n,表示要对指令作多少次改变。(1≤n≤50)

输出

共一行,一个整数,表示电子龟执行完所有的指令后,离起始点的最远距离。

输入样例

样例输入1
FT
1
样例输入2
FFFTFFF
2

输出样例

样例输出1
2
样例输出2
6 只有两个行走方向,设0表示正方向,1表示反方向。
dp[len][n][d],len是字符下标,n是变换次数,可以对一个字符重复变换,具体怎么变不需要深究,只需要进行状态转换。
dp[i][j][di],如果说第i个字符是'F',对于j(0~n),他的状态可以用dp[i - 1][j - k][]来更新,k在0~j范围内,也就是说两个状态相差k此变换,变换次数如果是偶数,可以相当于没变,如果是奇数,多出来第一次要么把T变F,要么把F变T,
这里是'F'变'T',方向变了,就要用反方向的来更新,如果k是偶数,就正方向的朝着正方向多走一步,反方向的往回走-1.
如果第i个是'T',k是奇数,变换此字符,方向相当于不变,k是偶数,方向变反。
代码:
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#define inf 0x3f3f3f3f
using namespace std;
int n,c,dp[][][];
char s[];
int main() {
scanf("%s %d",s + ,&n);
int len = strlen(s + );
memset(dp,-inf,sizeof(dp));
dp[][][] = dp[][][] = ;
for(int i = ;i <= len;i ++) {
for(int j = ;j <= n;j ++) {///修改了j个字符,要么是T->F,要么F->T
for(int k = ;k <= j;k ++) {
if(s[i] == 'F' && k & || s[i] == 'T' && !(k & )) {
dp[i][j][] = max(dp[i][j][],dp[i - ][j - k][]);
dp[i][j][] = max(dp[i][j][],dp[i - ][j - k][]);
}
else {
dp[i][j][] = max(dp[i][j][],dp[i - ][j - k][] + );
dp[i][j][] = max(dp[i][j][],dp[i - ][j - k][] - );
}
}
}
}
printf("%d",max(dp[len][n][],dp[len][n][]));
return ;
}

51nod 1657 电子龟的更多相关文章

  1. 杭电ACM分类

    杭电ACM分类: 1001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1.2.3.4.5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze ...

  2. 如何一步一步用DDD设计一个电商网站(九)—— 小心陷入值对象持久化的坑

    阅读目录 前言 场景1的思考 场景2的思考 避坑方式 实践 结语 一.前言 在上一篇中(如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成),有一行注释的代码: public interfa ...

  3. 如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成

    阅读目录 前言 建模 实现 结语 一.前言 前面几篇已经实现了一个基本的购买+售价计算的过程,这次再让售价丰满一些,增加一个会员价的概念.会员价在现在的主流电商中,是一个不大常见的模式,其带来的问题是 ...

  4. 如何一步一步用DDD设计一个电商网站(十)—— 一个完整的购物车

     阅读目录 前言 回顾 梳理 实现 结语 一.前言 之前的文章中已经涉及到了购买商品加入购物车,购物车内购物项的金额计算等功能.本篇准备把剩下的购物车的基本概念一次处理完. 二.回顾 在动手之前我对之 ...

  5. 如何一步一步用DDD设计一个电商网站(一)—— 先理解核心概念

    一.前言     DDD(领域驱动设计)的一些介绍网上资料很多,这里就不继续描述了.自己使用领域驱动设计摸滚打爬也有2年多的时间,出于对知识的总结和分享,也是对自我理解的一个公开检验,介于博客园这个平 ...

  6. 如何一步一步用DDD设计一个电商网站(七)—— 实现售价上下文

    阅读目录 前言 明确业务细节 建模 实现 结语 一.前言 上一篇我们已经确立的购买上下文和销售上下文的交互方式,传送门在此:http://www.cnblogs.com/Zachary-Fan/p/D ...

  7. 如何一步一步用DDD设计一个电商网站(六)—— 给购物车加点料,集成售价上下文

    阅读目录 前言 如何在一个项目中实现多个上下文的业务 售价上下文与购买上下文的集成 结语 一.前言 前几篇已经实现了一个最简单的购买过程,这次开始往这个过程中增加一些东西.比如促销.会员价等,在我们的 ...

  8. 如何一步一步用DDD设计一个电商网站(五)—— 停下脚步,重新出发

    阅读目录 前言 单元测试 纠正错误,重新出发 结语 一.前言 实际编码已经写了2篇了,在这过程中非常感谢有听到观点不同的声音,借着这个契机,今天这篇就把大家提出的建议一个个的过一遍,重新整理,重新出发 ...

  9. 如何一步一步用DDD设计一个电商网站(四)—— 把商品卖给用户

    阅读目录 前言 怎么卖 领域服务的使用 回到现实 结语 一.前言 上篇中我们讲述了“把商品卖给用户”中的商品和用户的初步设计.现在把剩余的“卖”这个动作给做了.这里提醒一下,正常情况下,我们的每一步业 ...

随机推荐

  1. UE4 ios环境搭建备忘

    1.windows.mac安装证书 2.安装xcode .app -- 路径可以拖入 sudo gem install xcodeproj 3.错误处理 Setting up Mono Running ...

  2. Navicat工具链接 mysql"Access denied for user'root'@'IP'" 用户远程赋值

    如题 用Navicat远程连接数据库出现错误   给用户添加权限 连接MySQL mysql -uroot -p: use mysql; 更改权限 使用grant all privileges on来 ...

  3. LeetCode 537. 复数乘法(Complex Number Multiplication)

    537. 复数乘法 537. Complex Number Multiplication 题目描述 Given two strings representing two complex numbers ...

  4. LeetCode 150. 逆波兰表达式求值(Evaluate Reverse Polish Notation) 24

    150. 逆波兰表达式求值 150. Evaluate Reverse Polish Notation 题目描述 根据逆波兰表示法,求表达式的值. 有效的运算符包括 +, -, *, /.每个运算对象 ...

  5. Echarts数据可视化grid直角坐标系(xAxis、yAxis)

    mytextStyle={ color:"#333", //文字颜色 fontStyle:"normal", //italic斜体 oblique倾斜 font ...

  6. 对于并发任务,应该使用 Task 替代 BackgroundWorker

    背景 EF + Oracle,并发存储监控记录,使用 BackgroundWorker 时产生错误如下: public void MonitorLogging(DateTime DateStart, ...

  7. Python操作MongoDB查询时处理ObjectId

    从bson中导入ObjectId对象,将字符串转换成id对象查询使用: from bson import ObjectId import pymongo conn = pymongo.MongoCli ...

  8. spring session cpu占用过高

      集成spring session很简单,只需几行代码即可. @Configuration @EnableRedisHttpSession public class SessionConfig { ...

  9. crontab 定时删除

    /60 * * * /bin/find /usr/local/****/****/****/****/****.log.2019* -exec rm -f {} ; >/dev/null 2&g ...

  10. Js学习01--基础知识

    一. JavaScript有三种书写格式 1.行内式 <button onclick = 'alert('nice day!');'>Nice Day</button> 2. ...