
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