自己想了个方法,没有对,80分 dalao求调
#include<iostream>
#include<vector>
using namespace std;
int n,cnt,ans;
int maps[10][10],dp[10][10];
int dx[]={1,0};
int dy[]={0,1};
vector< pair<int,int> >lu,newlu;
int int_read(){
int x=0;
short f=1;
char c=getchar();
while(c<'0'||c>'9'){
if(c=='-'){
f=-f;
}
c=getchar();
}
while(c>='0'&&c<='9'){
x=x*10+c-'0';
c=getchar();
}
return f*x;
}
void qwq(){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cout<<maps[i][j]<<" ";
}
cout<<"\n";
}
}
void dfs(int x,int y){
ans+=maps[x][y];
newlu.push_back({x,y});
if(x==n&&y==n){
if(ans>cnt){
cnt=ans;
lu=newlu;
}
ans-=maps[x][y];
newlu.pop_back();
return;
}
for(int i=0;i<=1;i++){
int nx=x+dx[i];
int ny=y+dy[i];
if(nx>=1&&nx<=n&&ny>=1&&ny<=n){
dfs(nx,ny);
}
}
ans-=maps[x][y];
newlu.pop_back();
}
int main(){
n=int_read();
int x,y,z;
while(true){
x=int_read();
y=int_read();
z=int_read();
if(!x){
break;
}
maps[x][y]=z;
}
qwq();
dfs(1,1);
cout<<cnt<<"\n";
for(int i=0;i<int(lu.size());i++){
maps[lu[i].first][lu[i].second]=0;
}
qwq();
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
dp[i][j]=max(dp[i-1][j],dp[i][j-1])+maps[i][j];
}
}
cout<<dp[n][n]+cnt;
return 0;
}