方格取数

方格取数

 

玄学的四维/简化后三位dp

 

n小于等于9,狂喜,可以用一些奇奇怪怪的方法了

 

dp[i][j][k]代表走到(ij)和(ki+j-k)时可取的最大值

 

然后没有了

 

//
//  main.cpp
//  P1004 方格取数
//
//  Created by Yuying Xue on 2018/8/5.
//  Copyright © 2018年 Yuying Xue. All rights reserved.
//

#include <bits/stdc++.h>
using namespace std;
int a[12][12],f[20][20][20][20];

int x,y,z;

int main() {
    int n;
    cin>>n;
    cin>>x>>y>>z;
    
    while(x!=0&&y!=0)
    {
        a[x][y]=z;
        cin>>x>>y>>z;
    }
    
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            for(int k=1;k<=n;k++)
                for(int p=1;p<=n;p++)
                {
                    f[i][j][k][p]=max(f[i-1][j][k-1][p],max(f[i][j-1][k-1][p],max(f[i-1][j][k][p-1],f[i][j-1][k][p-1])))+a[i][j]+a[k][p];
                    if(i==k&&j==p) f[i][j][k][p]-=a[i][p];
                }
    
    cout<<f[n][n][n][n];
    return 0;
}

 

 

 

posted @ 2021-03-02 17:29  Adaxy  阅读(28)  评论(0)    收藏  举报