0分求助qwq

P1649 [USACO07OCT] Obstacle Course S

Isenthalpic @ 2020-05-22 14:34:16

#include<bits/stdc++.h>
#define ll long long
#define inf 1e9
using namespace std;
const int N=110;
int n,dp[N][N][N*2+1];
int sx,sy,ex,ey;
char mp[N][N];
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
        {
            cin>>mp[i][j];
            if(mp[i][j]=='A')sx=i,sy=j;
            if(mp[i][j]=='B')ex=i,ex=j;
        }
    for(int k=1;k<=n*2+1;k++)
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                dp[i][j][k]=inf;
    dp[sx][sy][0]=0;
    for(int k=1;k<=n*2+1;k++)
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                if(mp[i][j]=='.'||mp[i][j]=='B')
                {
                    if(mp[i-1][j]=='.')dp[i][j][k]=min(dp[i][j][k],dp[i-1][j][k-1]);
                    if(mp[i][j-1]=='.')dp[i][j][k]=min(dp[i][j][k],dp[i][j-1][k-1]);
                    if(mp[i+1][j]=='.')dp[i][j][k]=min(dp[i][j][k],dp[i+1][j][k-1]);
                    if(mp[i][j+1]=='.')dp[i][j][k]=min(dp[i][j][k],dp[i][j+1][k-1]);
                    if(k==1)continue;
                    if((mp[i-1][j]=='.'||mp[i][j-1]=='.')&&mp[i-1][j-1]=='.')dp[i][j][k]=min(dp[i][j][k],dp[i-1][j-1][k-2]+1);
                    if((mp[i+1][j]=='.'||mp[i][j+1]=='.')&&mp[i+1][j+1]=='.')dp[i][j][k]=min(dp[i][j][k],dp[i+1][j+1][k-2]+1);
                    if((mp[i-1][j]=='.'||mp[i][j+1]=='.')&&mp[i-1][j+1]=='.')dp[i][j][k]=min(dp[i][j][k],dp[i-1][j+1][k-2]+1);
                    if((mp[i+1][j]=='.'||mp[i][j-1]=='.')&&mp[i+1][j-1]=='.')dp[i][j][k]=min(dp[i][j][k],dp[i+1][j-1][k-2]+1);
                }
    if(dp[ex][ey][n*2+1]==inf)printf("%d",-1);
    else printf("%d",dp[ex][ey][n*2+1]);
    return 0;
}

|