跳舞的線 - 亂拐彎

題目鏈接:跳舞的線 - 亂拐彎


顯然到一個點之後,方向是有關係的,所以我們多加一個狀態存方向即可。


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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章