http://wikioi.com/problem/1220/
最基本经典的DP题目,唯一有点意思的是,自底向上计算会更简洁。另外对这种+方式累计的DP,可以直接把原来的存进去,然后再加,本质是不用在同一步更新,因为没有更复杂的运算,只是叠加而已。
#include <stdio.h> int dp[101][101]; int Max(int x, int y) { return x > y ? x : y; } int main() { int n; scanf("%d", &n); for (int i = 1; i <= n; i++) { for (int j = 1; j <= i; j++) { scanf("%d", &dp[i][j]); } } for (int i = n; i >= 2; i--) { for (int j = 1; j < i; j++) { dp[i-1][j] += Max(dp[i][j], dp[i][j+1]); } } printf("%d ", dp[1][1]); return 0; }