全部评论 3

  • 置顶

    啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦

    2026-04-16 来自 浙江

    1
  • #include<iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    #define N 55
    int a[N][N];
    int opt[2*N][N][N];
    int main(){
        int k,x,i,j,m,n,add;
        scanf("%d%d",&m,&n);
        for (i=1;i<=m;i++)
            for (j=1;j<=n;j++)
                scanf("%d",&a[i][j]);
        opt[2][1][1]=0;//第一步时 值为0
            for (k=3;k<=m+n;k++)//从3开始
                for (i=1;i<=min(k-1,m);i++)//这个要注意时k-1和m中的最小值
                    for (x=1;x<=min(k-1,m);x++)//同上{
                        if (i==x) add=a[i][k-i];//i=x时是同一个位置只加上一个值
                            else add=a[i][k-i]+a[x][k-x];
                        opt[k][i][x]=max(opt[k][i][x],opt[k-1][i-1][x-1]);
                        opt[k][i][x]=max(opt[k][i][x],opt[k-1][i][x]);
                        opt[k][i][x]=max(opt[k][i][x],opt[k-1][i-1][x]);
                        opt[k][i][x]=max(opt[k][i][x],opt[k-1][i][x-1]);//每个人2种方向 乘法原理 共四个可能的状态
                            opt[k][i][x]+=add;
                    }
        printf("%d\n",opt[m+n][m][m]);//最终状态
        return 0;
    }
    

    2026-04-16 来自 浙江

    1
  • 跟狗市一样(纯恶意)

    3天前 来自 浙江

    0
暂无数据

提交答案之后,这里将显示提交结果~

首页