NYOJ 61 传纸条

Posted fzuhyj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NYOJ 61 传纸条相关的知识,希望对你有一定的参考价值。

双线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 传纸条的主要内容,如果未能解决你的问题,请参考以下文章

NYOJ 61 DP

南阳OJ 61 传纸条

pyoj61 双线DP

Acwing-----275. 传纸条

方格取数+ 传纸条 noip2000 + noip2008 DP

P1006 传纸条