求助,#2 TLE
查看原帖
求助,#2 TLE
143477
糖宝SugarBaby楼主2021/9/8 16:29

代码如下,正常的四维深搜

#include <iostream>
using namespace std;
int a[15][15],dp[15][15][15][15];
int n;
int dfs(int x1,int y1,int x2,int y2){
	if(dp[x1][y1][x2][y2]!=-1){
		return dp[x1][y1][x2][y2];
	}
	if(x1==n&&x2==n&&y1==n&&y2==n){
		return 0;
	} 
	int sum=0;
	if(x1<n&&x2<n){
		int tmp=dfs(x1+1,y1,x2+1,y2)+a[x1+1][y1]+a[x2+1][y2];
		if(x1+1==x2+1&&y1==y2){
			tmp-=a[x1+1][y1];
		}
		sum=max(sum,tmp);
	}
	if(x1<n&&y2<n){
		int tmp=dfs(x1+1,y1,x2,y2+1)+a[x1+1][y1]+a[x2][y2+1];
		if(x1+1==x2&&y1==y2+1){
			tmp-=a[x1+1][y1];
		}
		sum=max(sum,tmp);
	}
	if(y1<n&&x2<n){
		int tmp=dfs(x1,y1+1,x2+1,y2)+a[x1][y1+1]+a[x2+1][y2];
		if(x1==x2+1&&y1+1==y2){
			tmp-=a[x1][y1+1];
		}
		sum=max(sum,tmp);
	}
	if(y1<n&&y2<n){
		int tmp=dfs(x1,y1+1,x2,y2+1)+a[x1][y1+1]+a[x2][y2+1];
		if(x1==x2&&y1+1==y2+1){
			tmp-=a[x1][y1+1];
		}
		sum=max(sum,tmp);
	}
	//cout<<sum<<endl;
	return sum;
}
int main(){
	int i,j,k,l,tx,ty,tv;
	for(i=0;i<=n;i++){
		for(j=0;j<=n;j++){
			for(k=0;k<=n;k++){
				for(l=0;j<=n;l++){
					dp[i][j][k][l]=-1;
				}
			}
		}
	}
	cin>>n;
	do{
		cin>>tx>>ty>>tv;
		a[tx][ty]=tv;
	}while(!(tx==0&&ty==0&&tv==0));
	cout<<dfs(1,1,1,1)+a[1][1]<<endl;
	return 0;
}

#2超时,调试后发现深搜死循环,sum一直为0 另一个问题是,如果四维数组的初始化放在do while之后,在循环结束之后n会莫名变成-1,求大佬解答。

2021/9/8 16:29
加载中...