P1004
4维dp(因为n<=10)
就是二维dp+判断是否重复取
#include<bits/stdc++.h>
using namespace std;
int dp[15][15][15][15],a[15][15],x,y,z;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n;
cin>>n;
while(cin>>x>>y>>z){
if(x==0)break;
a[x][y]=z;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
for(int l=1;l<=n;l++){
for(int r=1;r<=n;r++){
dp[i][j][l][r]=max(max(dp[i-1][j][l-1][r],dp[i-1][j][l][r-1]),max(dp[i][j-1][l-1][r],dp[i][j-1][l][r-1]))+a[i][j]+a[l][r];
if(i==l&&r==j)dp[i][j][l][r]-=a[i][j];
}
}
}
}
}