l老实题解
2026-03-20 18:20:25
发布于:浙江
17阅读
0回复
0点赞
#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;
}
全部评论 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













有帮助,赞一个