मान लीजिए हमारे पास एक त्रिभुज है। हमें ऊपर से नीचे तक का न्यूनतम पथ योग ज्ञात करना है। प्रत्येक चरण में हम नीचे की पंक्ति में आसन्न संख्याओं पर जा सकते हैं।
उदाहरण के लिए, यदि निम्न त्रिभुज इस प्रकार है
[ [2], [3,4], [6,5,7], [4,1,8,3] ]
ऊपर से नीचे तक का न्यूनतम पथ योग 11 (2 + 3 + 5 + 1 =11) है।
आइए चरणों को देखें
- गतिशील प्रोग्रामिंग दृष्टिकोण में उपयोग करने के लिए एक तालिका बनाएं।
- n :=त्रिभुज का आकार
- i के लिए :=n – 2 डाउन टू 0
- जे के लिए:=0 से मैं
- dp[j] :=त्रिभुज[i, j] + न्यूनतम dp[j] और dp[j + 1]
- जे के लिए:=0 से मैं
- रिटर्न डीपी[0]
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें
उदाहरण
class Solution { public: void printVector(vector <int>& v){ for(int i = 0; i < v.size(); i++)cout << v[i] << " "; cout << endl; } int minimumTotal(vector<vector<int>>& triangle) { vector <int> dp(triangle.back()); int n = triangle.size(); for(int i = n - 2; i >= 0; i--){ for(int j = 0; j <= i; j++){ dp[j] = triangle[i][j] + min(dp[j], dp[j + 1]); } // printVector(dp); } return dp[0]; } };
इनपुट
[[2],[3,4],[6,5,7],[4,1,8,3]]
आउटपुट
11