原题链接 http://poj.org/problem?id=1163
The Triangle
Description
7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 (Figure 1)
Input
Your program is to read from standard input. The first line contains one integer N: the number of rows in the triangle. The following N lines describe the data of the triangle. The number of rows in the triangle is > 1 but <= 100. The numbers in the triangle, all integers, are between 0 and 99.
Output
Your program is to write to standard output. The highest sum is written as an integer.
Sample Input
5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5
Sample Output
30
Source Code
/*
简单DP f(i, j) = Max{ f(i,j)+f(i+1,j) , f(i,j)+f(i+1,j+1)}
*/
#include <iostream>
using namespace std;
int nums[101][101];
int main() {
int i, j, num;
while(scanf("%d", &num) != EOF) {
memset(nums, 0, sizeof(nums));
for (i = 1; i <= num; i++) {
for (j = 0; j < i; j++) {
scanf("%d", &nums[i - 1][j]);
}
}
int left, right;
for (i = num - 2; i >=0; i --) {
for (j = 0; j <= i; j++) {
if (nums[i + 1][j] > nums[i + 1][j + 1]) {
nums[i][j] +=nums[i + 1][j];
} else {
nums[i][j] +=nums[i + 1][j + 1];
}
}
}
printf("%d\n", nums[0][0]);
}
}