nyoj_61: 传纸条(一)

题目链接

使用双线dp,假设两个人同时从左上角移动到右下角,且满足路线不交叉,另k=x1+y1=x2+y2压缩状态进行优化。每次状态转移满足 x1,x2,y1,y2都在矩阵范围内,且(x2,y2)在相对于(x1,y1)右上方的位置。大致如下图。

nyoj_61: 传纸条(一)

#include<bits/stdc++.h>
using namespace std;

int n,m;
][][];
][];

int Max(int a,int b,int c,int d)
{
    int t1=max(a,b);
    int t2=max(c,d);
    return max(t1,t2);
}

int main()
{
    int T;
    cin>>T;
    while(T--)
    {
        cin>>m>>n;
        ;i<=m;i++)
            ;j<=n;j++)
                cin>>mp[i][j];
        memset(dp,,sizeof(dp));
        dp[][][]=;
        ;k<=m+n;k++)
            ;x1<=n;x1++)
                ;x2<=n;x2++)
                {
                    int y1=k-x1,y2=k-x2;
                     || y2< || y1>m || y2>m || y1==y2)
                        continue;
                    dp[k][x1][x2]=Max(dp[k-][x1][x2],dp[k-][x1-][x2],
                                      dp[k-][x1][x2-],dp[k-][x1-][x2-])
                                      +mp[y1][x1]+mp[y2][x2];
                }
        printf(][n-][n]);
    }
}
上一篇:Java数据结构之字符串模式匹配算法---KMP算法2


下一篇:CV_EXPORTS定义及作用