rqnoj-342-最不听话的机器人-dp
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的更多相关文章
- RQNOJ 342 最不听话的机器人:网格dp
题目链接:https://www.rqnoj.cn/problem/342 题意: DD 有一个不太听话的机器人,这个机器人总是会有自己的想法,而不会完全遵守 DD 给它的指令. 现在 DD 在试图命 ...
- RQNOJ 328 炮兵阵地:状压dp
题目链接:https://www.rqnoj.cn/problem/328 题意: 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队. 一个N*M的地图由N行M列组成(N≤100,M≤10), ...
- RQNOJ 169 最小乘车费用:水dp
题目链接:https://www.rqnoj.cn/problem/169 题意: 给出行驶1-10公里的费用(所有车一样),可以倒车,问行驶n公里的最小费用. 题解: 大水题... (=´ω`=) ...
- UVALive 3983 捡垃圾的机器人 DP
这个题目我最初的做法沿用树形DP的做法,设置一个 dp[i][0]表示机器人在i点不回去的最短路径,dp[i][1]表示机器人在i点回去的最短路径,规划方向为i-1向i转移,结果发现这个不能用树形的结 ...
- Luogu P5469 [NOI2019]机器人 (DP、多项式)
不用FFT的多项式(大雾) 题目链接: https://www.luogu.org/problemnew/show/P5469 (这题在洛谷都成绿题了海星) 题解: 首先我们考虑,一个序列位置最右边的 ...
- 【RQNOJ PID106】最大加权矩形(DP)
题目描述 给定一个正整数n( n<=100),然后输入一个N*N矩阵.求矩阵中最大加权矩形,即矩阵的每一个元素都有一权值,权值定义在整数集上.从中找一矩形,矩形大小无限制,是其中包含的所有元素的 ...
- hdu 4003(树形dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4003 思路:dp[i][j]表示以i为根选择j个机器人的最小花费,然后就是背包了:dp[u][i]=m ...
- HDU-4003 Find Metal Mineral 树形DP (好题)
题意:给出n个点的一棵树,有k个机器人,机器人从根节点rt出发,问访问完整棵树(每个点至少访问一次)的最小代价(即所有机器人路程总和),机器人可以在任何点停下. 解法:这道题还是比较明显的能看出来是树 ...
- P1070 道路游戏
题目描述 小新正在玩一个简单的电脑游戏. 游戏中有一条环形马路,马路上有 n 个机器人工厂,两个相邻机器人工厂之间由一小段马路连接.小新以某个机器人工厂为起点,按顺时针顺序依次将这 n 个机器人工厂编 ...
随机推荐
- net异步线程获取返回值的三种方式
方式一:endInvoke using System; using System.Collections.Generic; using System.Text; using System.Thread ...
- jenkins+git实现docker持续部署
jenkins所做的事情很简单,就拿我现在的情况来说吧,(1).每次开发完成,我都会push到我的远程仓库:(2).我再将我push到远程仓库的代码pull到我的测试服务器上:(3).在测试服务器上, ...
- 最常用App开发工具更新总结
程序员都知道,App常用开发工具有Sublime Text 3.Webstorm.Eclipse和APICloud Studio等,那么这些开发工具在2016年又有什么重大更新呢? 1.APIClou ...
- svn更新项目时遇到被锁住的问题
来自:http://blog.csdn.net/woshixuye/article/details/7776742 遇到问题 我们用svn更新某个项目的时候,有时候会遇到一些什么文件夹被locked等 ...
- Bugfree实用心得_转
转自:http://blog.csdn.net/benkaoya/article/details/8719257 本博下有许多实用技巧 1. 什么是问题跟踪系统 问题跟踪系统(Issue Tracki ...
- Windows 7 / Windows 10 安装 IPX/SPX
以我的系统为例: Windows 7/10 x64 首先下载 NWLINK IPX/SPX 驱动(这是 Microsoft 对 IPX/SPX 的实现.) http://pan.baidu.com/s ...
- swift 异步加载图片(第三方框架ImageLoader)
import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: ...
- Hint
select /*+ first_rows(20) */ * from t where id<20 --分页 select /*+ all_rows */ * from ...
- 建立自己的Yum源
转自http://kicklinux.com/setup-yum-repos-server/ 命令 reposync 可以直接同步yum源 如/etc/yum.repos.d/cloudera-cdh ...
- Autowired注解的妙用---在Controller里的构造函数里获取需要注入的对象
/*@Resource private Observer<TaxiObserverVo> taxiPushObserver; @Resource private Observer<T ...