http://codeforces.com/contest/133/problem/E

题目就是给定一段序列,要求那个乌龟要走完整段序列,其中T就是掉头,F就是向前一步,然后开始在原点,起始方向随意,要求输出能走到最远是哪里。

首先可以保证的是,他最远走的可以默认是向右走,因为,如果你说是向左走的话,我可以设置相反的开始face,就是开始的时候面向那里,从而得到相反的结论。所以就能得到向左走,是-1,向右走,是+1

那么从最终状态考虑,

最后肯定是走完了整段序列,然后改变了n次,face是那里还不清楚的,所以就是dp[i][j][face]能表达完状态。

face : 0 or 1

dp[i][j][face]表示走完前i个,改变了j次,最后face向哪里的时候的最优解

那么转移过来的时候:

因为一个点可以改变很多次,所以。

for (int i = 1; i <= lenstr; ++i) //枚举整段序列(这是必须的)

  for (int j = 0; j <= n; ++j) //枚举前i个位置一共改变了多少次

    for (int h = 0; h <= j; ++h) //枚举第i个位置改变了多少次(因为可以重复改变)

如果同一个点改变了奇数次,相当于没变。以此类推

所以就能从dp[i - 1][j - h][face]这个转移到下一个

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#define IOS ios::sync_with_stdio(false)
using namespace std;
#define inf (0x3f3f3f3f)
typedef long long int LL; #include <iostream>
#include <sstream>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <string>
const int maxn = + ;
int dp[maxn][maxn][];
char str[maxn];
void work() {
int n;
for (int i = ; i <= maxn - ; ++i) {
for (int j = ; j <= maxn - ; ++j) {
for (int k = ; k < ; ++k) {
dp[i][j][k] = -inf;
}
}
}
dp[][][] = ;
dp[][][] = ;
scanf("%s%d", str + , &n);
for (int i = ; str[i]; ++i) {
for (int j = ; j <= n; ++j) {
for (int h = ; h <= j; ++h) {
if (str[i] == 'T') {
if (h & ) {
dp[i][j][] = max(dp[i][j][], dp[i - ][j - h][] + );
dp[i][j][] = max(dp[i][j][], dp[i - ][j - h][] - );
} else {
dp[i][j][] = max(dp[i][j][], dp[i - ][j - h][]);
dp[i][j][] = max(dp[i][j][], dp[i - ][j - h][]);
}
} else { // 'F'
if (h & ) { //to 'T'
dp[i][j][] = max(dp[i][j][], dp[i - ][j - h][]);
dp[i][j][] = max(dp[i][j][], dp[i - ][j - h][]);
} else {
dp[i][j][] = max(dp[i][j][], dp[i - ][j - h][] + );
dp[i][j][] = max(dp[i][j][], dp[i - ][j - h][] - );
}
}
}
}
}
int lenstr = strlen(str + );
int ans = max(dp[lenstr][n][], dp[lenstr][n][]);
cout << ans << endl;
} int main() {
#ifdef local
freopen("data.txt","r",stdin);
#endif
work();
return ;
}

Codeforces Beta Round #96 (Div. 2) E. Logo Turtle dp的更多相关文章

  1. Codeforces Beta Round #96 (Div. 1) C. Logo Turtle —— DP

    题目链接:http://codeforces.com/contest/132/problem/C C. Logo Turtle time limit per test 2 seconds memory ...

  2. Codeforces Beta Round #96 (Div. 1) C. Logo Turtle DP

    C. Logo Turtle   A lot of people associate Logo programming language with turtle graphics. In this c ...

  3. Codeforces Beta Round #96 (Div. 1) D. Constants in the language of Shakespeare 贪心

    D. Constants in the language of Shakespeare Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codef ...

  4. Codeforces Beta Round #96 (Div. 2) (A-E)

    写份DIV2的完整题解 A 判断下HQ9有没有出现过 #include <iostream> #include<cstdio> #include<cstring> ...

  5. Codeforces Beta Round #77 (Div. 2 Only)

    Codeforces Beta Round #77 (Div. 2 Only) http://codeforces.com/contest/96 A #include<bits/stdc++.h ...

  6. Codeforces Beta Round #80 (Div. 2 Only)【ABCD】

    Codeforces Beta Round #80 (Div. 2 Only) A Blackjack1 题意 一共52张扑克,A代表1或者11,2-10表示自己的数字,其他都表示10 现在你已经有一 ...

  7. Codeforces Beta Round #83 (Div. 1 Only)题解【ABCD】

    Codeforces Beta Round #83 (Div. 1 Only) A. Dorm Water Supply 题意 给你一个n点m边的图,保证每个点的入度和出度最多为1 如果这个点入度为0 ...

  8. Codeforces Beta Round #79 (Div. 2 Only)

    Codeforces Beta Round #79 (Div. 2 Only) http://codeforces.com/contest/102 A #include<bits/stdc++. ...

  9. Codeforces Beta Round #76 (Div. 2 Only)

    Codeforces Beta Round #76 (Div. 2 Only) http://codeforces.com/contest/94 A #include<bits/stdc++.h ...

随机推荐

  1. Yii2使用Redis - 从安装redis到使用 [ 2.0 版本 ]

    Yii2使用Redis - 从安装redis到使用 [ 2.0 版本 ] 一.安装Redis和简单配置 1. 下载Redis安装包 地址:http://redis.io/download , 本文选择 ...

  2. Mac使用记录

    ---恢复内容开始--- brew list //查看brew安装东东 ls //当前目录下内容 brew --cache //查看brew下载目录 /usr/local/Cellar/ //隐藏文件 ...

  3. MySQL交叉表处理_20160923

    交叉表处理,在二维表中例如下面表 想把年月字段放到列字段,在sql中可以使用sum(if(条件,求和字段,null)) 函数来进行行列的转置 1.首先是上篇的年月字段在一列 SELECT city A ...

  4. poj1733 Parity game[带权并查集or扩展域]

    地址 连通性判定问题.(具体参考lyd并查集专题该题的转化方法,反正我菜我没想出来).转化后就是一个经典的并查集问题了. 带权:要求两点奇偶性不同,即连边权为1,否则为0,压缩路径时不断异或,可以通过 ...

  5. 2084. Asm.Def的基本算法

    2084. Asm.Def的基本算法 传送门 ★☆   输入文件:asm_algo.in   输出文件:asm_algo.out   简单对比时间限制:1 s   内存限制:256 MB [题目描述] ...

  6. QT(2)项目文件介绍

    一.项目创建 二.文件说明 三.QT模块

  7. 洛谷 1344 [USACO4.4]追查坏牛奶Pollutant Control——最大流

    题目:https://www.luogu.org/problemnew/show/P1344 那个边数的限制,只要把边权乘1001再+1即可.乘1001是因为有1000条边,这样流量小的不会因为边数多 ...

  8. VijosP1180:选课

    描述 学校实行学分制.每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分.学校开设了N(N<300)门的选修课程,每个学生可选课程的数量M是给定的.学生选修了这M门课并考核通过就能获得 ...

  9. grep的用法(CentOS7)及有关正则表达式的使用

    环境准备:alias grep="grep --color" 1.grep以整行为单位进行处理,行中有的匹配显示出来 Last中取出符合root的行:grep  '查找字符串' l ...

  10. MFC编辑框数据实时更新问题

    在VC里,很多情况下需要更新控件,也就是调用UpdateData(FALSE);但是如果是在循环中调用该函数,会导致没有时间来刷新界面,消息得不到相应,从外部看来,似乎整个循环只执行了一次Update ...