跳舞的线 - 乱拐弯

    技术2022-07-14  65

    题目链接:跳舞的线 - 乱拐弯


    显然到一个点之后,方向是有关系的,所以我们多加一个状态存方向即可。


    AC代码:

    #pragma GCC optimize("-Ofast","-funroll-all-loops") #include<bits/stdc++.h> //#define int long long using namespace std; const int N=1e3+10; int n,m,mi[N][N][2],mx[N][N][2]; char g[N][N]; signed main(){ cin>>n>>m; for(int i=1;i<=n;i++) scanf("%s",g[i]+1); memset(mi,0x3f,sizeof mi); mi[1][1][0]=mi[1][1][1]=0; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if(g[i][j]=='o'){ if(i>1){ mi[i][j][1]=min(mi[i-1][j][1],mi[i-1][j][0]+1); mx[i][j][1]=max(mx[i-1][j][1],mx[i-1][j][0]+1); } if(j>1){ mi[i][j][0]=min(mi[i][j-1][0],mi[i][j-1][1]+1); mx[i][j][0]=max(mx[i][j-1][0],mx[i][j-1][1]+1); } } if(g[1][1]=='#'||min(mi[n][m][0],mi[n][m][1])>=0x3f3f3f3f) return puts("-1"),0; cout<<max(max(mx[n][m][0],mx[n][m][1])-1,0)<<' '<<min(mi[n][m][0],mi[n][m][1]); return 0; }
    Processed: 0.014, SQL: 9