CSU 1510 Happy Robot DP
来源:互联网 发布:软件测试简历模板 编辑:程序博客网 时间:2024/06/05 11:42
Happy Robot
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 147 Solved: 68
[Submit][Status][Web Board]
Description
Input
There will be at most 1000 test cases. Each case contains a command sequence with no more than 1000 characters.
Output
For each test case, print the case number, followed by minimal/maximal possible x (in this order), then the minimal/maximal possible y.
Sample Input
F?FL??LFFFRF
Sample Output
Case 1: 1 3 -1 1Case 2: -1 1 0 2Case 3: 1 1 3 3
点击打开题目链接
机器人执行指令,可以前进,左转,右转。
主要是对 ‘?’ 特殊处理
结构体DP[ d ][ i ] 保存当前方向为DIRS[ d ] ,剩下 i 个指令要执行,所取得的X,Y的最大最小值。
#include <cstdio>#include <cstring>#include <cassert>#include <cstdlib>#include <iostream>using namespace std;struct Point{ int x, y; Point(int x = 0, int y = 0) : x(x), y(y) {}};typedef Point Vector;const int MAXN = 1000 + 5;char CMD[MAXN];Vector DIRS[4];int n;void init(){ DIRS[0].x = 1; //向右 DIRS[0].y = 0; DIRS[1].x = 0; //向上 DIRS[1].y = 1; DIRS[2].x = -1; //向左 DIRS[2].y = 0; DIRS[3].x = 0; //向下 DIRS[3].y = -1;}struct Ans{ int minX, minY, maxX, maxY; Ans& update(const Ans& a) //更新X,Y的最大,最小值 { minX = min(minX, a.minX); minY = min(minY, a.minY); maxX = max(maxX, a.maxX); maxY = max(maxY, a.maxY); return *this; } Ans operator + (const Vector& v) const //重载“+”运算符 { Ans a = *this; a.minX += v.x; a.maxX += v.x; a.minY += v.y; a.maxY += v.y; return a; }};// DP(d, i) 表示当前方向为DIRS中的(0,1,2,3),剩下i个指令要执行,X,Y分别能走出的差量Ans DP[4][MAXN];int main(){ //freopen("in.txt", "r", stdin); init(); for (int t = 1; scanf("%s", &CMD) == 1; t++) { n = strlen(CMD); memset(DP, 0, sizeof(DP)); for (int i = 1; i <= n; i++) // 还剩i个指令 { char c = CMD[n - i]; for (int d = 0; d < 4; d++) // 当前的方向 { Ans& a = DP[d][i]; Ans al = DP[(d + 1) % 4][i - 1], //上一个指令,左转 ar = DP[(d - 1 + 4) % 4][i - 1], //上一个指令,右转 af = DP[d][i - 1] + DIRS[d]; //上一个指令,前进 if (c == 'L') a = al; //判断是什么指令 else if (c == 'R') a = ar; else if (c == 'F') a = af; else { assert(c == '?'); //如果是‘?’ a = al.update(ar).update(af); //更新最值 } } } Ans& a = DP[0][n]; printf("Case %d: %d %d %d %d\n", t, a.minX, a.maxX, a.minY, a.maxY); } return 0;}
0 0
- CSU 1510 Happy Robot DP
- CSU 1510Happy Robot(dp)
- csu 1510 Happy Robot(字符串DP,记忆化搜索)
- CSU 1510 Happy Robot(字符串上的dp)
- CSU 1510 Happy Robot(字符串上的dp)
- 湖南14年省赛 H - Happy Robot dp
- CSU 1098 Happy watering
- CSU 1098 Happy watering
- csu1510: Happy Robot
- CSU 1902: Happy Chinese Poker
- csu1510 Happy Robot 递推
- CSU 1098: Happy watering(线段树)
- CSU 1529 Equator DP
- CSU 1529: Equator(dp)
- CSU 1206 概率DP
- dp --- CSU 1547: Rectangle
- CSU 1963 斜率DP
- dp Happy Travel
- HDU 2030 汉字统计(汉字字符串)
- #include预处理机制详解
- 聊一聊CommonJS,Requirejs,SeaJS,AMD,CMD之间需要理清的关系
- 实战网卡bond
- 141.[LeetCode]Linked List Cycle
- CSU 1510 Happy Robot DP
- 关于equals和hashcode方法
- HDU 2031 进制转换(模拟)
- 机器学习总结
- Java IO流分析整理
- bzoj 3998(后缀自动机)
- Java笔记---Hadoop 2.7.1下WordCount程序详解
- iOS 视图控制器转场详解
- 1084. Broken Keyboard (20)