三角形 oj62

来源:互联网 发布:双色球算法必中蓝球 编辑:程序博客网 时间:2024/06/05 07:55

三角形

发布时间: 2017年5月25日 19:57   最后更新: 2017年5月26日 00:18   时间限制: 1000ms   内存限制: 128M


3 8 

8 1 0 

2 7 4 4 

4 5 2 6 5 

(图一) 

图一表示一个5行的数字三角形。假设给定一个n行数字三角形,计算出从三角形顶至底的一条路径,使该路径经过的数字总和最大。 
每一步只能由当前位置向左下或右下。 

你的程序要能接受标准输入。第一行包含一个整数T,表示总的测试次数。对于每一种情况:第一行包含一个整数N,其中1 < N < 100,表示三角形的行数。接下来的N行输入表示三角形的每一行的元素Ai,j,其中0 < Ai,j < 100。

输出每次测试的最大值并且占一行。

 复制
1 5 7 3 8 8 1 0  2 7 4 4 4 5 2 6 5
30
#include <cstdio> #include <iostream>using namespace std;int main(){int t;cin >> t;while (t--){int n;cin >> n;int **pp = new int*[n];int k=n-1;for (int i = n; i >= 1; i--){pp[k--] = new int[i];}int tm = 1;for (int i = 0; i <n; i++){for (int j = 0; j < tm; j++)scanf("%d", &pp[i][j]);tm++;}int tmp = n;for (int i = n-1; i >= 1; i--){for (int j = 0; j < tmp-1; j++){// 0 1  1 2  2 3    3  4pp[i-1][j] += (pp[i][j] >pp[i][j + 1] ? pp[i][j] : pp[i][j+1]);}tmp--;}cout << pp[0][0] << endl;}return 0;}


原创粉丝点击