欢迎来到SFWR的博客

P1859 不听话的机器人

题目描述

机器人收到N条指令,但它不想走到障碍物上或走出边界,所以决定拒绝一些指令。求最少拒绝多少条指令?

FORWARD前进1

BACK后退1

LEFT左转90度

RIGHT右转90度

输入输出格式

输入格式:

 

第一行M|100、N|1000、X0、Y0,M*M场地,N条指令起点(X0,Y0) 接下来一个M*M矩阵,表示场地。.为场地,*为障碍物

接下来N行,表示N条命令

 

输出格式:

 

一个数,表示最少拒绝多少条命令

#include<bits/stdc++.h>
using namespace std;
int n,m,xx,yy;
int dp[102][102][4][501];

int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
string s;
char mp[120][120];
int main()
{
    memset(dp,127,sizeof(dp));
    cin>>m>>n>>xx>>yy;
    dp[xx][yy][3][0]=0;
    for(int i=1;i<=m;i++)
    for(int j=1;j<=m;j++)
    cin>>mp[i][j];
    for(int i=1;i<=n;i++)
    {
        cin>>s;
        char tk=s[0];
        if(tk=='L')
        {
            for(int x=1;x<=m;x++)
            for(int y=1;y<=m;y++)
            for(int l=0;l<=3;l++)
            dp[x][y][l][i]=min(dp[x][y][l][i-1]+1,dp[x][y][(l+1)%4][i-1]);
            
        }
        if(tk=='R')
        {
            for(int x=1;x<=m;x++)
            for(int y=1;y<=m;y++)
            for(int l=0;l<=3;l++)
            dp[x][y][l][i]=min(dp[x][y][l][i-1]+1,dp[x][y][(l+3)%4][i-1]);
        }
        if(tk=='F')
        {
            for(int x=1;x<=m;x++)
            for(int y=1;y<=m;y++)
            for(int l=0;l<=3;l++)
            dp[x][y][l][i]=min(dp[x][y][l][i-1]+1,dp[x-dx[l]][y-dy[l]][l][i-1]);
            
            for(int x=1;x<=m;x++)
            for(int y=1;y<=m;y++)
            for(int l=0;l<=3;l++)if(mp[x][y]=='*')
            dp[x][y][l][i]=0x3f3f3f3f;
        }
        if(tk=='B')
        {
            for(int x=1;x<=m;x++)
            for(int y=1;y<=m;y++)
            for(int l=0;l<=3;l++)
            dp[x][y][l][i]=min(dp[x][y][l][i-1]+1,dp[x+dx[l]][y+dy[l]][l][i-1]);    
            for(int x=1;x<=m;x++)
            for(int y=1;y<=m;y++)
            for(int l=0;l<=3;l++)
            if(mp[x][y]=='*')
            dp[x][y][l][i]=0x3f3f3f3f;
        }
        
        
    }
    int ans=0x3f3f3f3f;
    for(int x=1;x<=m;x++ )
    for(int y=1;y<=m;y++)
    for(int l=0;l<=3;l++)
    ans=min(ans,dp[x][y][l][n]);
    cout<<ans;
}

 

posted @ 2019-05-18 21:53  SFWR  Views(249)  Comments(0Edit  收藏  举报