码迷,mamicode.com
首页 > 编程语言 > 详细

算法训练方格取数

时间:2020-06-06 21:42:53      阅读:68      评论:0      收藏:0      [点我收藏+]

标签:ret   线程   std   style   贪心   end   nbsp   pac   多线程   

#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;
 }

 

算法训练方格取数

标签:ret   线程   std   style   贪心   end   nbsp   pac   多线程   

原文地址:https://www.cnblogs.com/MorrowWind/p/13056411.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!