记录
#include<bits/stdc++.h>
using namespace std;
int a[10][10];
int dp[10][10];
int point[10][10];
int main(){
int n,x,y,z;
cin >> n;
while(cin >> x >> y >> z,z!=0){
a[x][y]=z;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(dp[i-1][j]>dp[i][j-1]){
dp[i][j]=dp[i-1][j];
point[i][j]=1;
}else{
dp[i][j]=dp[i][j-1];
point[i][j]=2;
}
dp[i][j]+=a[i][j];
}
}
int ans=dp[n][n];
int i=n,j=n;
while(i>0&&j>0){
a[i][j]=0;
if(point[i][j]==1)i--;
else j--;
}
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]);
dp[i][j]+=a[i][j];
}
}
ans+=dp[n][n];
cout << ans;
return 0;
}
使用动态规划+路线储存