题目:数字三角形,形如
3
3 2
4 5 1
1 3 4 1
每个点只能选择向左或向右走,取一条路径,使得路径上数字和最大。
无需求出路径,求出最大值。
输入n,和 n 行数字三角形 n<=100
思路:递归解决
用二维数组 d[ l ][ r ] 存数字三角形
if ( l == n) maxSum( l , r ) = d [ l ][ r ] ;
else maxSum ( l , r ) = max { maxSum( l+1, r ) , maxSum( l+1, r+1 ) }
很简单呀
代码如下:
#include <iostream>
#include <algorithm>
using namespace std;
#define MAX 101
int d[MAX][MAX];
int n;
int MaxSum(int l,int r)
{
if(l==n)
return d[l][r];
else
return max(MaxSum(l+1,r),MaxSum(l+1,r+1))+d[l][r];
}
int main()
{
cin >> n;
for(int i=1;i<=n;i++)
for(int j=1;j<=i;j++)
cin >&g