zoukankan      html  css  js  c++  java
  • Triangle --- 至顶向下求最小值

    Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent numbers on the row below.

    For example, given the following triangle

    [
         [2],
        [3,4],
       [6,5,7],
      [4,1,8,3]
    ]
    

    The minimum path sum from top to bottom is 11 (i.e., 2 + 3 + 5 + 1 = 11).

    典型的球最短路径的问题,需要使用动态规划的思想,从上到下依次求每个点的最小距离 

    int minimumTotal(vector<vector<int> > &triangle) {
            int nSize = triangle.size();
            if (nSize<1)
                return 0;
            vector<int> sums(nSize);
            vector<int> tmps(nSize);
        
            sums[0] = triangle[0][0];
            for (int  i = 1;  i < nSize;  i++)
            {
                vector<int> vals = triangle[i];
                int nNum = vals.size();
        
                 tmps = sums;
                sums[0] = tmps[0] + vals[0];
                for (int j=1; j<i; j++)
                {
                    sums[j] = tmps[j-1]>tmps[j]?tmps[j]+vals[j]:tmps[j-1]+vals[j];
                }
        
                sums[i] = tmps[i-1]+vals[i];
            }
        
            int nMin = sums[0];
            for (int i = 1; i < nSize; i++)
            {
                if (sums[i] < nMin)
                    nMin = sums[i];
            }
        
            return nMin;
        }
  • 相关阅读:
    Postfix邮件服务
    Python
    LVS
    MFS
    Apache
    Zookeeper集群 + Kafka集群 + KafkaOffsetMonitor 监控
    shell 检测安装包
    shell ssh 批量执行
    shell 判断脚本参数
    bzoj 1500 修改区间 splay
  • 原文地址:https://www.cnblogs.com/zhhwgis/p/3959519.html
Copyright © 2011-2022 走看看