码迷,mamicode.com
首页 > 其他好文 > 详细

P1004 方格取数(四维dp)

时间:2020-05-22 13:00:30      阅读:64      评论:0      收藏:0      [点我收藏+]

标签:names   const   view   class   com   return   name   space   lap   

技术图片

 

 技术图片

经典dp问题,dp[i][j][k][l],i、j代表第一个人的位置,k、l代表第二个人的位置,则列出dp方程,dp[i][j][k][l]=max(dp[i-1][j][k][l-1],dp[i-1][j][k-1][l],dp[i][j-1][k-1][l],dp[i][j-1][k][l-1]);

特判一下两个人在同一个位置只能取一个数字。

技术图片
#include<bits/stdc++.h>
using namespace std;
const int maxn=12;
int dp[maxn][maxn][maxn][maxn];
int a[maxn][maxn];
int n,v1,v2,v3;
int main()
{
    cin>>n>>v1>>v2>>v3;
    while(v1!=0&&v2!=0&&v3!=0){
        a[v1][v2]=v3;
        cin>>v1>>v2>>v3;
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            for(int k=1;k<=n;k++){
                for(int l=1;l<=n;l++){
                    dp[i][j][k][l]=max(dp[i-1][j][k-1][l],max(dp[i-1][j][k][l-1],max(dp[i][j-1][k-1][l],dp[i][j-1][k][l-1])))+a[i][j]+a[k][l];
                    if(i==k&&j==l)dp[i][j][k][l]-=a[i][j];
                }
            }
        }
    }
    cout<<dp[n][n][n][n]<<endl;
    return 0;
}
View Code

 

P1004 方格取数(四维dp)

标签:names   const   view   class   com   return   name   space   lap   

原文地址:https://www.cnblogs.com/mohari/p/12936366.html

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