原文链接:http://poj.org/problem?id=1163;
题目大意:给你一个数字三角形,计算从头到尾和的最大值,每步只能走左边或右边;比如
7 3 8 8 1 0 2 7 4 4 4 5 2 6 5从数字7往下走,只能走3或8;
思路: 这是一个动态规划,多段图。可以从下往上思考,比如,从第4行,2往下走,可以走到4,也可以走到5,显然走到5,使结果最大,将结果保存在2所处的位置。依此类推,7走到5,4走到6,最后的4也走6。再计算上一行,最终可以得到结果。
代码如下:
#include
#define N 150
using namespace std;
int main()
{
int arr[N][N];
int n,i,j;
int temp;
cin >> n;
for(i = 0;i < n;i++)
{
for(j = 0;j < i+1;j++)
{
cin >> arr[i][j];
}
}
for(i = n-2;i > -1;i--)
{
for(j = 0;j < i+1;j++)
{
if(arr[i+1][j] > arr[i+1][j+1])
arr[i][j] += arr[i+1][j];
else arr[i][j] += arr[i+1][j+1];
}
}
cout << arr[0][0] << endl;
return 0;
}
因为比较简单,就没写注释。