51nod 1657 电子龟
电子龟的行动,是沿着直线左右走动的。他能够接受两种指令,“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 电子龟的更多相关文章
- 杭电ACM分类
杭电ACM分类: 1001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1.2.3.4.5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze ...
- 如何一步一步用DDD设计一个电商网站(九)—— 小心陷入值对象持久化的坑
阅读目录 前言 场景1的思考 场景2的思考 避坑方式 实践 结语 一.前言 在上一篇中(如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成),有一行注释的代码: public interfa ...
- 如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成
阅读目录 前言 建模 实现 结语 一.前言 前面几篇已经实现了一个基本的购买+售价计算的过程,这次再让售价丰满一些,增加一个会员价的概念.会员价在现在的主流电商中,是一个不大常见的模式,其带来的问题是 ...
- 如何一步一步用DDD设计一个电商网站(十)—— 一个完整的购物车
阅读目录 前言 回顾 梳理 实现 结语 一.前言 之前的文章中已经涉及到了购买商品加入购物车,购物车内购物项的金额计算等功能.本篇准备把剩下的购物车的基本概念一次处理完. 二.回顾 在动手之前我对之 ...
- 如何一步一步用DDD设计一个电商网站(一)—— 先理解核心概念
一.前言 DDD(领域驱动设计)的一些介绍网上资料很多,这里就不继续描述了.自己使用领域驱动设计摸滚打爬也有2年多的时间,出于对知识的总结和分享,也是对自我理解的一个公开检验,介于博客园这个平 ...
- 如何一步一步用DDD设计一个电商网站(七)—— 实现售价上下文
阅读目录 前言 明确业务细节 建模 实现 结语 一.前言 上一篇我们已经确立的购买上下文和销售上下文的交互方式,传送门在此:http://www.cnblogs.com/Zachary-Fan/p/D ...
- 如何一步一步用DDD设计一个电商网站(六)—— 给购物车加点料,集成售价上下文
阅读目录 前言 如何在一个项目中实现多个上下文的业务 售价上下文与购买上下文的集成 结语 一.前言 前几篇已经实现了一个最简单的购买过程,这次开始往这个过程中增加一些东西.比如促销.会员价等,在我们的 ...
- 如何一步一步用DDD设计一个电商网站(五)—— 停下脚步,重新出发
阅读目录 前言 单元测试 纠正错误,重新出发 结语 一.前言 实际编码已经写了2篇了,在这过程中非常感谢有听到观点不同的声音,借着这个契机,今天这篇就把大家提出的建议一个个的过一遍,重新整理,重新出发 ...
- 如何一步一步用DDD设计一个电商网站(四)—— 把商品卖给用户
阅读目录 前言 怎么卖 领域服务的使用 回到现实 结语 一.前言 上篇中我们讲述了“把商品卖给用户”中的商品和用户的初步设计.现在把剩余的“卖”这个动作给做了.这里提醒一下,正常情况下,我们的每一步业 ...
随机推荐
- python:对list去重
1.set()方法 numbers = [1,7,3,2,5,6,2,3,4,1,5] new_numbers = list(set(numbers)) print new_numbers 输出 [1 ...
- python 之网络编程(基于TCP协议Socket通信的粘包问题及解决)
8.4 粘包问题 粘包问题发生的原因: 1.发送端需要等缓冲区满才发送出去,造成粘包(发送数据时间间隔很短,数据了很小,会合到一起,产生粘包),这样接收端,就难于分辨出来了,必须提供科学的拆包机制. ...
- 【LEETCODE】38、167题,Two Sum II - Input array is sorted
package y2019.Algorithm.array; /** * @ProjectName: cutter-point * @Package: y2019.Algorithm.array * ...
- Markdown新手入门
目录 Markdown新手入门 一.字体样式 二. 标题 三.列表 四.引用和代码块 五.插入图片和超链接 六.创建表格 七. 上标和下标 八.着重显示和高亮显示 我是尾巴 Markdown新手入门 ...
- Linux -- touch 命令
在Linux中,每个文件都关联一个时间戳,并且每个文件搜会存储最近一次访问的时间.最近一次修改的时间和最近一次变更的时间等信息.所以,无论何时我们创建一个新文件,访问或者修改一个已经存在的文件,文件的 ...
- 在内网中 vue项目添加ECharts图表插件
原文地址:https://www.cnblogs.com/aknife/p/11753854.html 最近项目中要使用到图表 但是项目在内网中无法直接使用命令安装 然后我在外网中弄个vue的项目(随 ...
- 我的Vue朝圣之路2
1.创建第一个Vue案例 1. 引入Vue.js 2. 创建Vue对象 el : 指定根element(选择器) data : 初始化数据(页面可以访问) 3. 双向数据绑定 ...
- kafka和zookeeper安装部署(版本弄不好就是坑)
yum install -y unzip zip 配置host vi /etc/host172.19.68.10 zk1 1. zookeeper zookeeper下载地址 http://mirro ...
- java.lang.SecurityManager、java.security包
学习java大概3年多了,一直没有好好研究过java安全相关的问题,总是会看到 SecurityManger sm = System.getSecurityManager(); if(sm!=null ...
- 7、注解@Mapper、@MapperScan
7.注解@Mapper.@MapperScan 2018年09月20日 11:12:41 飞奔的加瓦 阅读数 3284 版权声明:版权声明:本文为博主原创文章,未经博主允许不得转载. https ...