DFS20分求助
查看原帖
DFS20分求助
341801
FChtholly楼主2021/7/19 09:10
#include <bits/stdc++.h>
using namespace std;
int n;
int a[107][107];
int dp[17][17][17][17];
int x,y,z;
int maxans;
void dfs(int ans,int x,int y,int x1,int y1){
	if(ans<dp[x][y][x1][y1]){
		return ;
	}
	if(x==n&&y==n&&x1==n&&y1==n){
		maxans=max(ans+a[x][y],maxans);
		return ;	
	}
	if(x<=n&&y+1<=n&&x1<=n&&y1+1<=n){
		if(x==x1&&y1+1==y+1){
			dfs(ans+a[x][y+1],x,y+1,x1,y1+1);
		}
		dfs(ans+a[x][y+1]+a[x1][y1+1],x,y+1,x1,y1+1);
	}
	if(x<=n&&y+1<=n&&x1+1<=n&&y1<=n){
		if(x==x1+1&&y1==y+1){
			dfs(ans+a[x][y+1],x,y+1,x1+1,y1);
		}
		dfs(ans+a[x][y+1]+a[x1+1][y1],x,y+1,x1+1,y1);
	}
	if(x+1<=n&&y<=n&&x1+1<=n&&y1<=n){
		if(x+1==x1+1&&y1==y){
			dfs(ans+a[x+1][y],x+1,y,x1+1,y1);
		}
		dfs(ans+a[x+1][y]+a[x1+1][y1],x+1,y,x1+1,y1);
	}
	if(x+1<=n&&y<=n&&x1<=n&&y1+1<=n){
		if(x+1==x1&&y1+1==y){
			dfs(ans+a[x+1][y],x+1,y,x1,y1+1);
		}
		dfs(ans+a[x+1][y]+a[x1][y1+1],x+1,y,x1,y1+1);
	}
	dp[x][y][x1][y1]=ans;
}
int main(){
	cin>>n;
	do{
		cin>>x>>y>>z;
		a[x][y]=z;
	}while(x!=0&&y!=0&&z!=0);
	dfs(a[1][1],1,1,1,1);
	cout<<maxans;
	return 0;
}
2021/7/19 09:10
加载中...