程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> [leetcode] 120 Triangle

[leetcode] 120 Triangle

編輯:C++入門知識

[leetcode] 120 Triangle


感覺acm做過之後,這種題太基本了....

沒啥好說的,最簡單的動態規劃,找出狀態轉移方程就可以了。采用由下到上的思想(這樣最後只需要取出dp[0][0]就是答案),本層每個結點的結果根據下面一行的路基累計和而計算,要麼取左邊的,要麼取右邊的,兩者取最小的即可。
狀態轉移方程:triangle[i][j] += min(triangle[i + 1][j], triangle[i + 1][j + 1])

 

class Solution {
public:
  int minimumTotal(vector > &triangle) {
    for (int i = triangle.size() - 2; i >= 0; --i)
      for (int j = 0; j <= i; ++j){
      	
        triangle[i][j] +=min(triangle[i+1][j+1],triangle[i+1][j]);
      }
    
    return triangle[0][0];
  }
};
類似的題目還有 hdu 2084的數塔,和本題的解法一致。

 

稍微進階一點的: hdu 1176 免費餡餅

 

思路:可將所有的時間段和餡餅看成是一個矩陣,時間就是行數,掉餡餅的就是列數,則就是數字三角形問題,從最底層找一條路徑,使得路徑上的和最大。狀態轉移方程為:dp[i][j]=max(dp[i+1][j-1],dp[i+1][j],dp[i+1][j-1])+pie[i][j]。pie[i][j]為時間i時在j位置掉的餡餅數目。

具體代碼這裡就不貼出了,大家盡量去實現一下。



 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved