这是一道简单的dp题
在做这道题之前,先说说这道题的简化版,即U210573 方格取数(简单版),这道题是只计算一条最大方案之和,很容易得到状态转移方程为:
f(x,y)=max(f(x-1,y),f(x,y-1))+g(x,y)
代码
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
int sum[10][10][10][10], g[10][10], n;
int main() {
int x, y, num, n;
scanf("%d", &n);
do {
cin >> x >> y >> num;
g[x][y] = num;
} while (!(!x && !y && !num));
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
for (int k = 1; k <= n; k++) {
int l = i + j - k;
if (l <= 0) {
break;
}
sum[i][j][k][l] = max(sum[i - 1][j][k - 1][l], max(sum[i - 1][j][k][l - 1], max(sum[i][j - 1][k - 1][l], sum[i][j - 1][k][l - 1])));
if (i == k && j == l) {
sum[i][j][k][l] += g[i][j];
} else {
sum[i][j][k][l] += g[i][j] + g[k][l];
}
}
}
}
printf("%d\n", sum[n][n][n][n]);
return 0;
}
抱天下工作室招人
要求:
- 年龄不限
- 有担当
- 有自己擅长的编程语言
- 愿意接受不定薪资(¥RMB)
- 有奉献精神
- 服从集体
- 敢于发言
有意者加Q群:536950507