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

NYOJ 61 传纸条(一)

时间:2018-10-15 23:08:58      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:color   一个   ring   class   坐标   std   for   span   ret   

双线DP

#include<iostream>
#include<algorithm>
#include<ctype.h>
#include<string>
#include<string.h>
#include<vector>
#include<queue> 
using namespace std;
int dp[110][55][55];    //压缩空间   dp[x1+y1][x1][x2]; 
                        //已知x1+y1 、x1和x2的值 ,结合x1 + y1 = x2 + y2 可以确定x1,y1,x2,y2四个值 

int mp[55][55];
int max(int a,int b,int c,int d)
{
    if(a>=b && a>=c && a>=d)    return a;
    else if(b>=a && b>=c && b>=d)    return b;
    else if(c>=a && c>=b && c>=d)    return c;
    else if(d>=a && d>=c && d>=b)    return d;
}
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int m,n;
        cin>>m>>n;
        for(int i=1;i<=m;i++)
        {
            for(int j=1;j<=n;j++)
            {
                cin>>mp[i][j];
            }
        }
        int k,x1,y1,x2,y2;
        for(k=0;k<=m+n;k++)
            for(x1=0;x1<=m;x1++)
                for(x2=0;x2<=m;x2++)
                    dp[k][x1][x2] = 0;
        for(k=2;k<=m+n;k++)
        {
            for(x1=1;x1<=m;x1++)        //(x,y)看作 其中一个坐标,结合k可求出对应的另一个点 ,遍历k和所有的(x,y)  就可以得到dp[k][x][y]的所有值 
            {
                for(x2=1;x2<=m;x2++)
                {
                    y1 = k - x1;
                    y2 = k - x2;
                                
                    if(  y1<=n && y2<=n && y1>=1 && y2>=1)    //不越界 
                    {
                        if(x1 != x2 && y1 != y2)        //不相交 
                        {
                            int v1 = dp[k-1][x1-1][x2-1] + mp[x1][y1] + mp[x2][y2];
                            int v2 = dp[k-1][x1][x2] + mp[x1][y1] + mp[x2][y2];
                            int v3 = dp[k-1][x1-1][x2] + mp[x1][y1] + mp[x2][y2];
                            int v4 = dp[k-1][x1][x2-1] + mp[x1][y1] + mp[x2][y2];
                            dp[k][x1][x2] = max(v1,v2,v3,v4);
                        }
                    }
                }    
            }    
        }
        
        cout<<dp[m+n-1][m][m-1]<<endl;
    
    }
    
    return 0;
} 

 

NYOJ 61 传纸条(一)

标签:color   一个   ring   class   坐标   std   for   span   ret   

原文地址:https://www.cnblogs.com/fzuhyj/p/9794933.html

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