题目链接:

cid=2095&pid=7">csu1510

解题思路:

要求解四个值x_min,x_max,y_min,y_max

首先考虑x_min怎样得到:由于机器人最后有能够面向四个方向(E,W,N,S),我们能够用一个数组a[4]来存机器人面向4个方向时x的值

a[0]: x+,a[1]:x-。a[2]:y+,a[3],y-;

仅仅要求出a[4]最后比較出最小值,即为x_min

而求a[4]的关键在于运行?命令时怎样得到最优解:

a[x]=Min(左转,右转,前进);

即 a[0]=Min(a[2],a[3],a[0]+1);

同理得到a[1],a[2],a[3]

代码:

#include<iostream>
#include<cstring>
#include<cstdio>
#define INF 9999
using namespace std;
char str[1050]; int Min(int a,int b,int c)
{
if(a>b)
a=b;
if(a>c)
a=c;
return a;
} int Max(int a,int b,int c)
{
if(a<b)
a=b;
if(a<c)
a=c;
return a;
} void change(int* t,int dir)
{
int tt=t[0];
if(dir)
{
t[0]=t[3];
t[3]=t[1];
t[1]=t[2];
t[2]=tt;
}
else
{
t[0]=t[2];
t[2]=t[1];
t[1]=t[3];
t[3]=tt;
}
} int main()
{
int len;
int t[4];
int Case=1;
while(~scanf("%s",str))
{
int a[4]= {0,-INF,-INF,-INF};
int b[4]= {0,INF,INF,INF};
int c[4]= {0,-INF,-INF,-INF};
int d[4]= {0,INF,INF,INF};
len=strlen(str);
for(int i=0; i<len; i++)
{
if(str[i]=='F')
{
a[0]++,a[1]--;
b[0]++,b[1]--;
c[2]++,c[3]--;
d[2]++,d[3]--;
}
else if(str[i]=='L')
{
change(a,1);
change(b,1);
change(c,1);
change(d,1);
}
else if(str[i]=='R')
{
change(a,0);
change(b,0);
change(c,0);
change(d,0);
}
else
{
t[0]=Max(a[0]+1,a[2],a[3]);
t[1]=Max(a[1]-1,a[2],a[3]);
t[2]=Max(a[0],a[1],a[2]);
t[3]=Max(a[0],a[1],a[3]);
memcpy(a,t,16);
t[0]=Min(b[0]+1,b[2],b[3]);
t[1]=Min(b[1]-1,b[2],b[3]);
t[2]=Min(b[0],b[1],b[2]);
t[3]=Min(b[0],b[1],b[3]);
memcpy(b,t,16);
t[0]=Max(c[0],c[2],c[3]);
t[1]=Max(c[1],c[2],c[3]);
t[2]=Max(c[0],c[1],c[2]+1);
t[3]=Max(c[0],c[1],c[3]-1);
memcpy(c,t,16);
t[0]=Min(d[0],d[2],d[3]);
t[1]=Min(d[1],d[2],d[3]);
t[2]=Min(d[0],d[1],d[2]+1);
t[3]=Min(d[0],d[1],d[3]-1);
memcpy(d,t,16);
}
}
t[0]=max(Max(a[0],a[1],a[2]),a[3]);
t[1]=min(Min(b[0],b[1],b[2]),b[3]);
t[2]=max(Max(c[0],c[1],c[2]),c[3]);
t[3]=min(Min(d[0],d[1],d[2]),d[3]);
printf("Case %d: %d %d %d %d\n",Case++,t[1],t[0],t[3],t[2]);
}
return 0;
}

csu1510 Happy Robot 递推的更多相关文章

  1. ZOJ 3981:Balloon Robot(思维+递推)

    题目链接 题意 有n支队在m个位置上做题,有一个机器人位置1到位置m再到位置1循环走派发气球,当队伍a在时间b做完了一道题目的时候,假如机器人走到队伍a的位置的时间为c,那么这个队伍的不开心值就是c- ...

  2. 【BZOJ-2476】战场的数目 矩阵乘法 + 递推

    2476: 战场的数目 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 58  Solved: 38[Submit][Status][Discuss] D ...

  3. 从一道NOI练习题说递推和递归

    一.递推: 所谓递推,简单理解就是推导数列的通项公式.先举一个简单的例子(另一个NOI练习题,但不是这次要解的问题): 楼梯有n(100 > n > 0)阶台阶,上楼时可以一步上1阶,也可 ...

  4. Flags-Ural1225简单递推

    Time limit: 1.0 second Memory limit: 64 MB On the Day of the Flag of Russia a shop-owner decided to ...

  5. 利用Cayley-Hamilton theorem 优化矩阵线性递推

    平时有关线性递推的题,很多都可以利用矩阵乘法来解决. 时间复杂度一般是O(K3logn)因此对矩阵的规模限制比较大. 下面介绍一种利用利用Cayley-Hamilton theorem加速矩阵乘法的方 ...

  6. 【66测试20161115】【树】【DP_LIS】【SPFA】【同余最短路】【递推】【矩阵快速幂】

    还有3天,今天考试又崩了.状态还没有调整过来... 第一题:小L的二叉树 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣.所以,小L当时卡在了二叉树. ...

  7. 简单递推 HDU-2108

    要成为一个ACMer,就是要不断学习,不断刷题...最近写了一些递推,发现递推规律还是挺明显的,最简单的斐波那契函数(爬楼梯问题),这个大家应该都会,看一点稍微进阶了一点的,不是简单的v[i] = v ...

  8. [ACM_动态规划] 数字三角形(数塔)_递推_记忆化搜索

    1.直接用递归函数计算状态转移方程,效率十分低下,可以考虑用递推方法,其实就是“正着推导,逆着计算” #include<iostream> #include<algorithm> ...

  9. 矩阵乘法&矩阵快速幂&矩阵快速幂解决线性递推式

    矩阵乘法,顾名思义矩阵与矩阵相乘, 两矩阵可相乘的前提:第一个矩阵的行与第二个矩阵的列相等 相乘原则: a b     *     A B   =   a*A+b*C  a*c+b*D c d     ...

随机推荐

  1. 深入理解php 匿名函数和 Closure

    而在PHP 5.3发布的时候, 其中有一条new feature就是支持闭包/Lambda Function, 我第一反应是以为zval新增了一个IS_FUNCTION, 但实际上是构造了一个PHP ...

  2. Loadrunner监控windows系统“找不到网络路径”问题解决

    一.监控windows系统: 1.监视连接前的准备工作 1)进入被监视windows系统,开启以下二个服务Remote Procedure Call(RPC) 和Remote Registry Ser ...

  3. LeetCode: Clone Graph 解题报告

    Clone GraphClone an undirected graph. Each node in the graph contains a label and a list of its neig ...

  4. Makefile学习之路——3

    特殊变量: 在Makefile中,有两个变量特殊变量会经常用到:MAKE和MAKECMDGOALS.MAKE变量表示的是当前处理Makefile的命令名是什么.当需要在Makefile中运行另一个Ma ...

  5. uWSGI的stats注释,送给需要的人,欢迎指正

    吐槽先,对于uWSGI状态信息没有文档说明这样一个现实,我只想说一句:F*CK YOU!!! 花了2天时间,累得眼珠子疼,针对这鬼畜的stats,借助Total Commander和VS大概撸了一边u ...

  6. 插入排序的C++实现

    直接插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止. 这个算法比较简单,不需要过多的解释 ...

  7. Web API(二):Web API概述

    一.什么是API API(Application Programming Interface)即应用程序编程接口,是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能 ...

  8. DataGridView使用技巧七:列顺序的调整、操作行头列头的标题

    一.列顺序的调整 设定DataGridView的AllowUserToOrderColumns为True的时候,用户可以自由调整列的顺序. 当用户改变列的顺序的时候,其本身的Index不好改变,但是D ...

  9. navicat导入csv

    1.navicat for mysql 导入csv时出错,主要是由于csv中包含汉字所致: 2.解决办法为再host新连接时,选择高级,然后在编码菜单里选择20936 (Simplified Chin ...

  10. 25+开源的在线购物软件(PHP, JavaScript 和 ASP.Net)

    25 +免费开源的电子商务解决方案,提供了建立一个在线购物所有主要功能,并能够连接到一个支付处理系统1. Magento Magento是一套专业开源的PHP电子商务系统.Magento设计得非常灵活 ...