提高DP

 方格取数

 

#include <iostream>
#include <algorithm>
const int N = 12;
int f[N*2][N][N], a[N][N];//注意这里f数组的第一维的大小应该为2*N,因为表示的是走到的方格行+列
using namespace std;

int main()
{
    int n;
    cin>>n;
    int r, l, x;
    while(cin>>r>>l>>x, r || l || x)
        a[r][l] = x;
    
    for(int k = 2; k <= n + n; k++)
        for(int i1 = 1;i1 <= n;i1++)
            for(int i2 = 1; i2 <= n;i2++)
            {
                int j1 = k - i1, j2 = k - i2;
                if(j1 >= 1 && j1 <= n && j2 >=1 && j2 <= n)
                {
                    int t = a[i1][j1];
                    if(i1 != i2) t += a[i2][j2];
                    int &x = f[k][i1][i2];
                    x = max(x, f[k - 1][i1-1][i2-1] + t);
                    x = max(x, f[k - 1][i1][i2-1] + t);
                    x = max(x, f[k - 1][i1-1][i2] + t);
                    x = max(x, f[k - 1][i1][i2] + t);
                }
            }
    cout<<f[2*n][n][n]<<endl;
}

 

posted @ 2020-04-23 16:57  龙雪可可  阅读(93)  评论(0编辑  收藏  举报
****************************************** 页脚Html代码 ******************************************