0
点赞
收藏
分享

微信扫一扫

275. 传纸条

尤克乔乔 2022-01-05 阅读 50
蓝桥杯c++

 和方格取数的分析一样

#include <iostream>
#include <algorithm>
using namespace std;
const int N=55;
int dp[2*N][N][N];
int a[N][N];
int main()
{
    int m,n;
    cin>>m>>n;
    //注意和方格取数不同的点在于是一个矩形不是正方形
    for(int i=1;i<=m;i++)
        for(int j=1;j<=n;j++)
            cin>>a[i][j];

    //i最大为m
    for(int k=2;k<=m+n;k++)
        for(int i1=1;i1<=m;i1++)
            for(int i2=1;i2<=m;i2++)
            {//即使好心值为0,也会帮忙
            //所以只要注意两个路径不能有重复的点就可以了
                
                //如果有越界值,直接跳过
                if(k-i1<=0||k-i1>n||k-i2<=0||k-i2>n)
                    continue;
                int t=a[i1][k-i1]+a[i2][k-i2];
                if(i1==i2)
                    t-=a[i1][k-i1];
                int &x=dp[k][i1][i2];
                x=max(x,dp[k-1][i1][i2]);
                x=max(x,dp[k-1][i1-1][i2]);
                x=max(x,dp[k-1][i1-1][i2-1]);
                x=max(x,dp[k-1][i1][i2-1]);
                x+=t;
            }
    cout<<dp[m+n][m][m];
}
举报

相关推荐

0 条评论