算法训练方格取数

Posted morrowwind

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法训练方格取数相关的知识,希望对你有一定的参考价值。

#include<bits/stdc++.h>
using namespace std;
// 走两次是不行的,因为这就是贪心了。。
// 需要多线程dp,就是想象有2个人同时走,他们可以走到一起,但是必须只加一次;
// 转移方程:
// (1)a,b都从上/下走过来
// (2)a,b一个上一个下走过来
// 共4种
//dp 数组代表a到哪,b到哪,可以不一样
int dp[11][11][11][11]={0},a[11][11]={0};
int main()
{
    int n,x,y,z,s;
    cin>>n;
    while(1){
        cin>>x>>y>>z;
        if(x==y&&y==z&&z==0) break;
        a[x][y]=z;
    }
for( int x1 = 1; x1 <= n; x1++ ) {
    for( int y1 = 1; y1 <= n; y1++ ) {
        for( int x2 = 1; x2 <= n; x2++ ) {
            for( int y2 = 1; y2 <= n; y2++ ){
                int t=max(dp[x1-1][y1][x2-1][y2],dp[x1][y1-1][x2][y2-1]);
                t=max(t,dp[x1-1][y1][x2][y2-1]);
                t=max(t,dp[x1][y1-1][x2-1][y2]);
                if(x1==x2&&y1==y2){
                    //代表到达同一位置,只能,加一次,每次都这样,就保证了前面的也不会重复加
                    dp[x1][y1][x2][y2]=t+a[x1][y1];
                }
                else dp[x1][y1][x2][y2]=t+a[x1][y1]+a[x2][y2];
            }
        }
    }
}
    cout<<dp[n][n][n][n]<<endl;
    return 0;
 }

 

以上是关于算法训练方格取数的主要内容,如果未能解决你的问题,请参考以下文章

dp算法之方格取数

codevs1043 方格取数

方格取数3

方格取数问题

(蓝桥杯)试题 算法训练 回形取数

「网络流 24 题」方格取数