dfs+dp c++
#include<iostream>
using namespace std;
int a[15][15],dp[15][15];bool aa[15][15];int ans=0;int n;
int r,c,v;
void dfs(int r,int c,int e,int anss){
aa[r][c]=1;anss+=a[r][c];
if(r==e&&c==e){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(aa[i][j]){
dp[i][j]=max(dp[i-1][j],dp[i][j-1]) ;
}
else{
dp[i][j]=max(dp[i-1][j],dp[i][j-1])+a[i][j];
}
}
}
anss=anss+dp[e][e];
ans=max(ans,anss);
return ;
}
else if(r==e){
dfs(r,c+1,e,anss);
aa[r][c+1]=0;
}
else if(c==e){
dfs(r+1,c,e,anss);
aa[r+1][c]=0;
}
else {
dfs(r+1,c,e,anss);
aa[r][c+1]=0;
dfs(r,c+1,e,anss);
aa[r+1][c]=0;
}
}
int main(){
cin>>n;
while(cin>>r>>c>>v){
if(r==0&&c==0&&v==0)break;
a[r][c]=v;
}
dfs(1,1,n,0);
cout<<ans<<endl;
}
np
膜拜楼下大佬
%%%
OrzOrz