1 5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5
30
思路:从倒数第二行开始,dp数组收集与下一行相加最大的数,最后的dp[1][1]就是结果
代码
#include <cstdlib> #include <iostream> #include <algorithm> using namespace std; int const MAX = 101; int main(int argc, char *argv[]) { int C, N; cin >> C; int val[MAX][MAX] = {{0, 0}}; int dp[MAX][MAX] = {{0, 0}}; while(C-- > 0) { cin >> N; for(int i=1; i<=N; i++) for(int j=1; j<=i; j++) cin >> val[i][j]; for(int i=1; i<=N; i++) dp[N][i] = val[N][i]; for(int i=N - 1; i>=1; i--) for(int j=1; j<=i; j++) dp[i][j] = max(dp[i + 1][j], dp[i + 1][j + 1]) + val[i][j]; cout << dp[1][1] << endl; } return 0; }
原文地址:http://blog.csdn.net/blue_skyrim/article/details/46507783