15分,DP好像写错了,求指教
查看原帖
15分,DP好像写错了,求指教
540363
AKPC楼主2022/8/4 09:15
#include <bits/stdc++.h>
using namespace std;
#define int long long
int a[101][101],f[101][101],n,m,x,y,z;bool v[101][101]={0};
signed main(){
	cin>>n>>m;
	for (int i=0;i<m;i++){
		cin>>x>>y>>z;
		a[x][y]=1+z;
		v[x][y]=1;
	}
	f[0][0]=0;
	for (int i=1;i<=n;i++)
		for (int j=1;j<=n;j++){
			if (i==1&&j==1) continue;
			if (v[i-1][j]==0&&v[i][j-1]==0){
				f[i][j]=114514;
				v[i][j]=0;
			}
			if (a[i][j]==0){
				if (v[i-1][j]==0) f[i][j]=f[i][j-1]+2,a[i][j]=a[i][j-1];
				else if (v[i][j-1]==0) f[i][j]=f[i-1][j]+2,a[i][j]=a[i-1][j];
				else if (v[i-1][j]>v[i][j-1]) f[i][j]=f[i][j-1]+2,a[i][j]=a[i][j-1];
				else f[i][j]=f[i-1][j]+2,a[i][j]=a[i-1][j];
			}
			else{
				if (a[i][j]!=a[i-1][j]&&a[i][j]!=a[i][j-1]) f[i][j]=1+min(f[i-1][j],f[i][j-1]);
				else if (a[i][j]!=a[i-1][j]) f[i][j]=min(1+f[i-1][j],f[i][j-1]);
				else if (a[i][j]!=a[i][j-1]) f[i][j]=min(f[i-1][j],1+f[i][j-1]);
				else f[i][j]=min(f[i-1][j],f[i][j-1]);
			}
		}
	f[n][n]>=114514?cout<<-1:cout<<f[n][n];
	return 0;
}

QAQ
提交记录

2022/8/4 09:15
加载中...