我需要这道题的完整C++代码:问题描述 在平面上有一些一维的点阵。 这些点的编号就像二维数组的编号一样,从上到下依次为第 1至第 行,从左到右依次为第1至第 m列,每一个点可以用行号和列号来表示。 现在有个人站在第 1行第 1列,要走到第 n 行第 m 列 每一步有三种走法:向下走(行号加1) 、向右走(列号加1)或向右下方走 (行号和列号同时加1)在每个点上有一个权值 vii,现在要求走过的点的权值和最大。 输入格式 输入第一行包含两个整数 n,m。 接下来 n 行,每行 m 个整数,分别表示 vi.jo 输出格式 输出一个整数,表示答案
时间: 2023-03-31 11:03:08 浏览: 51
以下是代码:
#include <stdio.h>
#define MAXN 1005
int n, m;
int v[MAXN][MAXN], f[MAXN][MAXN];
int max(int a, int b) {
return a > b ? a : b;
}
int main() {
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
scanf("%d", &v[i][j]);
}
}
f[1][1] = v[1][1];
for (int i = 2; i <= n; i++) {
f[i][1] = f[i - 1][1] + v[i][1];
}
for (int j = 2; j <= m; j++) {
f[1][j] = f[1][j - 1] + v[1][j];
}
for (int i = 2; i <= n; i++) {
for (int j = 2; j <= m; j++) {
f[i][j] = max(max(f[i - 1][j], f[i][j - 1]), f[i - 1][j - 1]) + v[i][j];
}
}
printf("%d\n", f[n][m]);
return ;
}