代码如下,正常的四维深搜
#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,求大佬解答。