题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2084
题 意:给你一个数塔,找出从定点到最底部的花费最大的路径的花费。
思 路:定义dp(X,Y) 表示从第X 层第Y 个位置到达底层的最大路径得分。原问题的最大路径得分即为dp(1,1)。
而得到的递推关系式为dp[i-1][j] = max( dp[i][j],dp[i][j+1]) + 这个位置的权值。
代码如下:
#include <iostream>
using namespace std;
#include <string.h>
#include <stdio.h>
#include <queue>
#include <algorithm>
typedef long long LL;
int dp[105][105];
int main()
{
int T;
scanf ( "%d", &T );
while( T-- )
{
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 > 1; i -- )
for( int j = 1; j < i; j ++ )
dp[i-1][j] += max( dp[i][j], dp[i][j+1] );
printf("%d\n",dp[1][1]);
}
return 0;
}