洛谷P1004方格取数 题解


#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <algorithm>
#include <queue>
#include <iomanip>
//#include <bits/stdc++.h>
#define MAXN 210000000
#define MINN -210000000
using namespace std;
typedef long long ll;
int m[15][15],ia,ib,ic;
int dp[12][12][12][12];
int main(){
    int n;
    cin>>n;
    while(cin>>ia>>ib>>ic){
        if(ia==0&&ib==0&&ic==0) break;
        m[ia][ib]=ic;
    }
    for(int a=1;a<=n;a++){
        for(int b=1;b<=n;b++){
            for(int c=1;c<=n;c++){
                for(int d=1;d<=n;d++){
                    dp[a][b][c][d]=max(max(dp[a][b-1][c][d-1],dp[a][b-1][c-1][d]),max(dp[a-1][b][c-1][d],dp[a-1][b][c][d-1]))+m[a][b]+m[c][d];
                    if(a==c&&b==d) dp[a][b][c][d]=dp[a][b][c][d]-m[a][b];
                }
            }
        }
    }
    cout<<dp[n][n][n][n]; 
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/starlit-night/p/12537407.html