• 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;
    }
    
    
  • 相关阅读:
    DataGirdView 编辑项时的验证
    存储过程分面
    Android PopupWindow菜单
    Android ListView 中的checkbox
    Linq Group
    final关键字
    BroadcastReceiver
    Android Studio 快捷键
    Android Studio 基础知识
    黑客帝国代码雨实现
  • 原文地址:https://www.cnblogs.com/Locking-Shonn/p/12569202.html
Copyright © 2020-2023  润新知