समस्या कथन
संख्याओं की एक त्रिकोणीय संरचना दी गई है, शीर्ष से नीचे तक न्यूनतम पथ योग ढूंढें। प्रत्येक चरण में आप नीचे की पंक्ति पर आसन्न संख्याओं पर जा सकते हैं।
उदाहरण
यदि इनपुट है -
5 7 3 8 1 2 9 6 4 5
तो न्यूनतम योग 13 है जैसा कि नीचे दिया गया है -
5 + 3 + 1 + 4
एल्गोरिदम
- डायनामिक प्रोग्रामिंग की मेमोराइजेशन तकनीक का उपयोग करें
- मेमोराइजेशन के लिए 1-D ऐरे बनाएं जिसे मेमोराइजेशन कहा जाता है
- प्रत्येक K पंक्ति के लिए नीचे दिए गए फॉर्मूला का उपयोग करें -
memorization[i] = min( memorization[i], memorization[i+1]) + A[k][i];
उदाहरण
#includeusing namespace std; int getMinSum(vector > &arr) { int memorization[arr.size()]; int n = arr.size() - 1; for (int i = 0; i < arr[n].size(); ++i) { memorization[i] = arr[n][i]; } for (int i = arr.size() - 2; i >= 0; --i) { for (int j = 0; j < arr[i + 1].size() - 1; ++j) { memorization[j] = arr[i][j] + min(memorization[j], memorization[j + 1]); } } return memorization[0]; } int main() { vector > arr = { {5}, {7, 3}, {8, 1, 2}, {9, 6, 4, 5}, }; cout << "Minimum sum path = " << getMinSum(arr) << endl; return 0; }
जब आप उपरोक्त प्रोग्राम को कंपाइल और 실행 करते हैं। यह निम्नलिखित आउटपुट उत्पन्न करता है -
आउटपुट
Minimum sum path = 13