数塔问题1059

求最小的路径

题目描述:

从数塔顶层出发,每个结点可以选择向左走或向右走,要求一直走到塔底,使得走过的路径上的数值和最小。

例如对于下面这样的数塔

    1
  2   3
4   5   6

按照 1 - 2 - 4 的路线走,可取得路径上的数值和的最小值为 7

输入描述:

每组输入的第一个行表示行数,最大不超过 1000 行。

后面每行为这个数塔特定行包含的正整数。这些正整数不大于 10000。

输出描述:

对于每组测试数据,输出一行答案。

样例输入:

3
1
2 3
4 5 6

样例输出:

7

从下往上遍历,求出每行的值往上加,直到最上面一行判断大小,就得解

 1 #include<iostream>
 2 using namespace std;
 3 int row[1000][1000];
 4 int main(){
 5     int n;
 6     while(cin>>n){
 7         int i,j,sum=0;
 8         for(i=0;i<n;i++){
 9             for(j=0;j<=i;j++){
10                 cin>>row[i][j];
11             }
12         }
13         for(i=n-2;i>=0;i--){
14             for(j=0;j<=i;j++){
15                 sum=row[i+1][j];
16                 if(sum>row[i+1][j+1]){
17                     sum=row[i+1][j+1];
18                 }
19                 row[i][j]=row[i][j]+sum;
20             }
21         }
22         cout<<row[0][0]<<endl;
23     }
24     return 0;
25 } 
重要

猜你喜欢

转载自www.cnblogs.com/zq-dmhy/p/10994151.html