您的位置:首页 > 其它

POJ 1163 The Triangle

2014-03-07 23:31 344 查看
原文链接: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

;
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;
}


因为比较简单,就没写注释。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: