金鞍玉勒寻芳客,未信我庐别有春。这篇文章主要讲述csu1510Happy Robot递推相关的知识,希望能为你提供帮助。
题目链接:
php?
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; }
【csu1510Happy Robot递推】
推荐阅读
- 阅读《Android 从入门到精通》(17)——进度条
- Android零基础入门第31节(几乎不用但要了解的AbsoluteLayout绝对布局)
- win xp系统怎样更改图片上的数字【图文详细教程】
- win xp系统下怎样安装草图大师|win xp系统安装草图大师的办法
- win xp系统下文件夹都变成exe格式的处理办法
- xp系统打开页面提示堆栈溢出的处理办法
- 萝卜家园xp系统不显示文件扩展名是怎样回事
- win xp系统怎样删除搜狗壁纸中的剩余壁纸
- winxp系统如何更改word2003背景颜色|xp系统更改word2003背景颜色图文详细教程