मान लीजिए कि हमारे पास एक 2डी मैट्रिक्स है जहां प्रत्येक सेल मैट्रिक्स [आर, सी] उस सेल में मौजूद सिक्कों की संख्या का प्रतिनिधित्व करता है। जब हम मैट्रिक्स [आर, सी] से सिक्के उठाते हैं, तो पंक्ति (आर -1) और (आर + 1) के सभी सिक्के गायब हो जाएंगे, साथ ही दो कोशिकाओं मैट्रिक्स [आर, सी + 1] और के सिक्के भी गायब हो जाएंगे। मैट्रिक्स [आर, सी - 1]। हमें अधिकतम संख्या में सिक्के एकत्र करने होंगे।
तो, अगर इनपुट पसंद है
2 | 8 | 7 | 6 |
10 | 10 | 4 | 2 |
5 | 9 | 2 | 3 |
तो आउटपुट 26 होगा क्योंकि हम 8, 6, और 9 और 3 सिक्कों के साथ सेल चुन सकते हैं, इसलिए कुल 26 है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- एक फ़ंक्शन को परिभाषित करें getmax() । इसमें गिरफ्तारी होगी
- पिछला_मैक्स:=0
- curr_max :=0
- res :=0
- गिरफ्तारी में प्रत्येक अंक के लिए, करें
- अस्थायी:=curr_max
- curr_max :=num + prev_max
- prev_max :=अधिकतम तापमान और prev_max
- res :=अधिकतम res और curr_max
- रिटर्न रेस
- मुख्य विधि से निम्न कार्य करें -
- यदि मैट्रिक्स खाली है, तो
- वापसी 0
- m :=मैट्रिक्स की पंक्ति गणना
- n :=मैट्रिक्स की कॉलम संख्या
- row_sum :=आकार m की एक सरणी और 0 से भरें
- 0 से m-1 की सीमा में i के लिए
- row_sum[i] :=getmax(matrix[i])
- रिटर्न गेटमैक्स(row_sum)
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
def getmax(arr): prev_max, curr_max = 0, 0 res = 0 for num in arr: temp = curr_max curr_max = num + prev_max prev_max = max(temp, prev_max) res = max(res, curr_max) return res def solve(matrix): if not matrix: return 0 m, n = len(matrix), len(matrix[0]) row_sum = [0 for _ in range(m)] for i in range(m): row_sum[i] = getmax(matrix[i]) return getmax(row_sum) matrix = [ [2, 8, 7, 6], [10, 10, 4, 2], [5, 9, 2, 3] ] print(solve(matrix))
इनपुट
[ [2, 8, 7, 6], [10, 10, 4, 2], [5, 9, 2, 3] ]
आउटपुट
26