题解
2023-05-13 17:28:58
发布于:四川
30阅读
0回复
0点赞
不多说废话
#include <bits/stdc++.h>
using namespace std;
#define N 55
int a[N][N];
int opt[2 * N][N][N];
int main(void)
{
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;
for (k = 3;k <= m + n;k++)
{
for (i = 1;i <= min(k - 1,m);i++)
{
for (x = 1;x <= min(k - 1,m);x++)
{
if (i == x)
{
add = a[i][k - i];
}
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]);
opt[k][i][x] += add;
}
}
}
printf("%d\n",opt[m + n][m][m]);
return 0;
}
这里空空如也
有帮助,赞一个