这个C数据也太水了吧,我这个都能过

#include <bits/stdc++.h>
using namespace std;
#define int long long
void solve(){
	int n,m;
	cin>>n>>m;
	int a[n][m];
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			cin>>a[i][j];
		}
	}
	int dp[n][m];
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			dp[i][j]=2147483647;
		}
	}
	
	dp[0][0]=0;
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			if(j!=0)dp[i][j]=min(dp[i][j],dp[i][j-1]+1+(a[i][j]!=a[i][j-1]));
			if(i!=0)dp[i][j]=min(dp[i][j],dp[i-1][j]+1+(a[i][j]!=a[i-1][j]));
		}
	}
	for(int i=0;i<n;i++){
		for(int j=m-1;j>=0;j--){
			if(j!=m-1)dp[i][j]=min(dp[i][j],dp[i][j+1]+1+(a[i][j]!=a[i][j+1]));
			if(i!=0)dp[i][j]=min(dp[i][j],dp[i-1][j]+1+(a[i][j]!=a[i-1][j]));
		}
	}
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			if(j!=0)dp[i][j]=min(dp[i][j],dp[i][j-1]+1+(a[i][j]!=a[i][j-1]));
			if(i!=0)dp[i][j]=min(dp[i][j],dp[i-1][j]+1+(a[i][j]!=a[i-1][j]));
		}
	}
	cout<<dp[n-1][m-1];
	return;
}
signed main(){
	int t=1;
	//cin>>t;
	while(t--){
		solve();
	}
	return 0;
}

全部评论
已经尝试卡了,这个C目前已经是加强过的数据了,见谅见谅(原校招题的数据更水,直接一次n^2dp都可以过
1 回复 分享
发布于 2023-12-31 20:34 香港
在同种地形组成的路径拐弯数目较多的情况我这个会爆掉
1 回复 分享
发布于 2023-12-31 20:33 江苏

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务