dp[i][j][k][[l]: 执行第i步,执行到点(j,k),方向为l时,用的最大步数。

状态转移根据step[i]转移。

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#define INF 99999999
using namespace std;
int xx[4]={1,0,-1,0};
int yy[4]={0,-1,0,1};
int dp[2][111][111][4];
int step[1100];
int map[110][110];
int main()
{
int n,m,x0,y0,i,j,k,l;
char str[10001];
while(~scanf("%d%d%d%d",&n,&m,&x0,&y0))
{
for(i=1;i<=n;i++)
{
scanf("%s",str);
for(j=1;j<=n;j++)
{
if(str[j-1]=='*')map[i][j]=0;
else map[i][j]=1;
}
}
for(i=1;i<=m;i++)
{
scanf("%s",str);
if( strcmp(str,"FORWARD")==0)step[i]=1;
else if( strcmp(str,"BACK")==0)step[i]=2;
else if( strcmp(str,"LEFT")==0)step[i]=3;
else if(strcmp(str,"RIGHT")==0)step[i]=4;
}
for(i=0;i<2;i++)
{
for(j=0;j<=n+10;j++)
{
for(k=0;k<=n+10;k++)
{
for(l=0;l<4;l++)dp[i][j][k][l]=-INF;
}
}
}
dp[0][x0][y0][0]=0;
int maxn;
maxn=0;
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
for(k=1;k<=n;k++)
{
if(map[j][k]==0)continue;
for(l=0;l<4;l++)
{
if(step[i]==1)
{
dp[i%2][j][k][l]=max(dp[(i+1)%2][j+xx[l]][k+yy[l]][l]+1,dp[(i+1)%2][j][k][l]);
}
else if(step[i]==2)
{
dp[i%2][j][k][l]=max(dp[(i+1)%2][j-xx[l]][k-yy[l]][l]+1,dp[(i+1)%2][j][k][l]);
}
else if(step[i]==3)
{
dp[i%2][j][k][l]=max(dp[(i+1)%2][j][k][(l+4-1)%4] +1,dp[(i+1)%2][j][k][l]);
}
else if(step[i]==4)
{
dp[i%2][j][k][l]=max(dp[(i+1)%2][j][k][(l+1)%4] +1,dp[(i+1)%2][j][k][l]);
}
maxn=max(maxn,dp[i%2][j][k][l]);
}
}
}
}
cout<<m-maxn<<endl;
}
return 0;
}

rqnoj-342-最不听话的机器人-dp的更多相关文章

  1. RQNOJ 342 最不听话的机器人:网格dp

    题目链接:https://www.rqnoj.cn/problem/342 题意: DD 有一个不太听话的机器人,这个机器人总是会有自己的想法,而不会完全遵守 DD 给它的指令. 现在 DD 在试图命 ...

  2. RQNOJ 328 炮兵阵地:状压dp

    题目链接:https://www.rqnoj.cn/problem/328 题意: 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队. 一个N*M的地图由N行M列组成(N≤100,M≤10), ...

  3. RQNOJ 169 最小乘车费用:水dp

    题目链接:https://www.rqnoj.cn/problem/169 题意: 给出行驶1-10公里的费用(所有车一样),可以倒车,问行驶n公里的最小费用. 题解: 大水题... (=´ω`=) ...

  4. UVALive 3983 捡垃圾的机器人 DP

    这个题目我最初的做法沿用树形DP的做法,设置一个 dp[i][0]表示机器人在i点不回去的最短路径,dp[i][1]表示机器人在i点回去的最短路径,规划方向为i-1向i转移,结果发现这个不能用树形的结 ...

  5. Luogu P5469 [NOI2019]机器人 (DP、多项式)

    不用FFT的多项式(大雾) 题目链接: https://www.luogu.org/problemnew/show/P5469 (这题在洛谷都成绿题了海星) 题解: 首先我们考虑,一个序列位置最右边的 ...

  6. 【RQNOJ PID106】最大加权矩形(DP)

    题目描述 给定一个正整数n( n<=100),然后输入一个N*N矩阵.求矩阵中最大加权矩形,即矩阵的每一个元素都有一权值,权值定义在整数集上.从中找一矩形,矩形大小无限制,是其中包含的所有元素的 ...

  7. hdu 4003(树形dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4003 思路:dp[i][j]表示以i为根选择j个机器人的最小花费,然后就是背包了:dp[u][i]=m ...

  8. HDU-4003 Find Metal Mineral 树形DP (好题)

    题意:给出n个点的一棵树,有k个机器人,机器人从根节点rt出发,问访问完整棵树(每个点至少访问一次)的最小代价(即所有机器人路程总和),机器人可以在任何点停下. 解法:这道题还是比较明显的能看出来是树 ...

  9. P1070 道路游戏

    题目描述 小新正在玩一个简单的电脑游戏. 游戏中有一条环形马路,马路上有 n 个机器人工厂,两个相邻机器人工厂之间由一小段马路连接.小新以某个机器人工厂为起点,按顺时针顺序依次将这 n 个机器人工厂编 ...

随机推荐

  1. angularJs:动态效果之:显示与隐藏(该例对比了普通赋值,层次赋值,事件的写法对比)

    testShowAndHiddern.html <!DOCTYPE html> <html ng-app="MyModule"> <head> ...

  2. 在虚拟机中安装Ubuntu Server 15.04

    学Linux,上红联! 红联Linux门户|Linux通用技术|Linux发行版技术|Linux企业应用|Linux实验室|红联Linux论坛 Linux系统教程 Linux入门 Linux管理 Li ...

  3. thinkphp文章列表及删除文章

    出师不利,数据一次删完了... 教程:http://www.thinkphp.cn/topic/9757.html 首先要构造mysql数据库 模板代码 </head> <body& ...

  4. javascript设计模式学习之十三——职责链模式

    一.职责链的定义和使用场景 职责链模式的定义是,职责链模式将一系列可能会处理请求的对象连接成一条链,请求在这些对象之间一次传递,直到遇到一个可以处理它的对象.从而避免请求的发送者和接收者之间的耦合关系 ...

  5. 查看docker中container的ip

    使用命令 docker inspect 容器ID 然后过虑出 IPAddress 即可查看 Docker 的 IP docker inspect 容器ID | grep IPAddress

  6. SQL是关于集合的

    一 以面向集合的思维方式来思考 公司里每个工作岗位上干了同样年数的员工列表 select  emplyee_id  from  job_history  group by  employee_id h ...

  7. javascript 正则表达式基础知识汇总

    正则表达式:对字符串中的信息实现查找.替换和提取操作.(不支持注释和空白,必须写在一行内)正则表达式的创建:包含在一对斜杠之间的字符(直接量语法)例如:var pattern = /s$/;     ...

  8. String的replaceAll方法中的正则表达式用法

    项目里面 需要对已手机号码进行 如下的显示 比如15088688388 要显示为150****8388的效果 实现这个简单的效果 方法有很多 我想试试用正则表达式去实现 查了点资料最终试出来以下方法可 ...

  9. C++Primer STL算法

    //1.概览: // A:beg和end是表示元素范围的迭代器. // B:beg2是表示第二个输入序列开始位置的迭代器.end2表示第二个序列的末尾位置,若没有end2,则假定beg2表示的序列至少 ...

  10. zepto和jquery的区别,zepto的不同使用8条小结 会JS就会zepto

    1. Zepto 对象 不能自定义事件 例如执行: $({}).bind('cust', function(){}); 结果:  TypeError: Object has no method 'ad ...