4维dp84pts求调(样例2超时)
查看原帖
4维dp84pts求调(样例2超时)
786213
TC1234楼主2025/7/2 14:11
 #include <bits/stdc++.h>
using namespace std;
int n;
int a[20][20]={};
int fx[2]={1,0};
int fy[2]={0,1};
int qk[10][10][10][10]={};
int dfs(int x1,int y1,int x2,int y2){
	int f1=0,f2=0;
	if (x1==n&&y1==n){
		f1++;
	}
	if (x2==n&&y2==n){
		f2++;
	}
	int dx1=x1,dx2=x2,dy1=y1,dy2=y2;
	for (int i=0;i<=1;i++){
		for (int j=0;j<=1;j++){
			dx1=x1,dx2=x2,dy1=y1,dy2=y2;
			if ((x1+fx[i])>=1&&(x1+fx[i])<=n&&(y1+fy[i])>=1&&(y1+fy[i])<=n){
				dx1+=fx[i];
				dy1+=fy[i];
			}else if(!f1){
				continue;
			}
			if ((x2+fx[j])>=1&&(x2+fx[j])<=n&&(y2+fy[j])>=1&&(y2+fy[j])<=n){
				dx2+=fx[j];
				dy2+=fy[j];
				//cout<<dx1<<" "<<dy1<<" "<<dx2<<" "<<dy2<<endl;
			}else if(!f2){
				dx1-=fx[i];
				dy1-=fy[i];
				continue;
			}
			//cout<<dx1<<" "<<dy1<<" "<<dx2<<" "<<dy2<<endl;
			int yj=qk[x1][y1][x2][y2];
			if (!f1){
				yj+=a[dx1][dy1];
			}
			if (!f2){
				yj+=a[dx2][dy2];
			}
			if (dx1==dx2&&dy1==dy2&&!f1&&!f2){
				yj-=a[dx1][dy1];
			}
			if (yj>qk[dx1][dy1][dx2][dy2]){
				qk[dx1][dy1][dx2][dy2]=yj;
			}
			if (dx1==n&&dy1==n&&dx2==n&&dy2==n){
				return 0;
			}
			dfs(dx1,dy1,dx2,dy2);
		}
	}
	return 0;
}
int main(){
	cin>>n;
	int d,b,c;
	while(cin>>d>>b>>c){
		if (d||b){
			a[d][b]=c;
		}else{
			break;
		}
	}
	/*for (int i=1;i<=n;i++){
		for (int j=1;j<=n;j++){
			cout<<a[i][j]<<" ";
		}
		cout<<endl;
	}*/
	dfs(1,1,1,1);
	cout<<qk[n][n][n][n]+a[1][1];
	return 0;
}
2025/7/2 14:11
加载中...