经典的动态规划题:
动态转移方程:f[i][j] = max{f[i-1][j], f[i-1][j-1]} + a[i][j]
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{
int ncase;
int num[105][105];
int max_sum[105][105];
int line;
int i, j;
int sum, res;
freopen("in.txt", "r", stdin);
scanf("%d", &ncase);
while (ncase--) {
sum = 0;
scanf("%d", &line);
memset(num, 0, sizeof(num));
memset(max_sum, 0, sizeof(max_sum));
for (i = 1; i <= line; i++) {
for (j = 1; j <= i; j++) {
scanf("%d", &num[i][j]);
}
}
max_sum[1][1] = num[1][1];
for (i = 2; i <= line; i ++) {
for (j = 1; j <= i; j ++) {
max_sum[i][j] = (max_sum[i-1][j] > max_sum[i-1][j-1] ? max_sum[i - 1][j] : max_sum[i - 1][j - 1]) + num[i][j];
}
}
res = 0;
for (i = 1; i <= line; i ++)
if (max_sum[line][i] > res) res = max_sum[line][i];
printf("%d\n", res);
}
return 0;
}