2019/3/20数塔问题

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

例如对于下面这样的数塔

1

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

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

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

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

样例输入:
3
1
2 3
4 5 6
样例输出:
7

#include <iostream>
#include <algorithm>
using namespace std;

const int N = 1000;
int data[N][N];

int n;
int i,j;
void tower_walk()
{ 
    
    int temp_min;
    for ( i = n - 1; i >= 0; i--)
    {
        for ( j = 0; j <= i; j++)
        {
            temp_min = min(data[i+1][j], data[i + 1][j + 1]);
            data[i][j] = temp_min + data[i][j];
        }
    }
}
 
int main()
{
    while(cin>>n){
    for (int i = 0; i < n; ++i)
    {
        for (int j = 0; j <= i; ++j)
        {
            cin >> data[i][j];
        }
    }
    tower_walk();
    cout << data[0][0] <<endl;}
	return 0;
}

原文地址:https://www.cnblogs.com/Locking-Shonn/p/12569202.html