मान लीजिए हमें इंटीजर नंबर्स वाला एक ऐरे दिया गया है। हम एक ऑपरेशन कर सकते हैं जहां हम array[i] के मान को उसके वर्ग मान से बदल सकते हैं; यानी array[i] * array[i]। केवल इस तरह का एक ऑपरेशन अनुमत है और हमें ऑपरेशन के बाद अधिकतम संभव सबएरे का योग वापस करना है। सबएरे खाली नहीं हो सकता।
उदाहरण के लिए, यदि इनपुट array = [4, 1, -2, -1] है, तो आउटपुट 17 होगा।
यदि हम array[0] के मान को उसके वर्ग मान से बदलते हैं, तो ऐरे [16, 1, -2, -1] बन जाता है। इससे संभव अधिकतम सबएरे [16, 1] है, और इसका अधिकतम योग मान 16 + 1 = 17 है।
हल करने के चरण
dp1 :=float('-inf')मान वाली नई सूचीdp2 :=float('-inf')मान वाली नई सूचीarrayमें प्रत्येकnumके लिए:max(dp1[-1] + num, num)कोdp1के अंत में जोड़ेंmax(dp1[-2] + num**2, num**2, dp2[-1] + num)कोdp2के अंत में जोड़ें
dp2का अधिकतम एलिमेंट वापस करें।
उदाहरण
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें:
def solve(array):
dp1 = [float('-inf')]
dp2 = [float('-inf')]
for num in array:
dp1.append(max(dp1[-1] + num, num))
dp2.append(max(dp1[-2] + num**2, num**2, dp2[-1] + num))
return max(dp2)
print(solve([4, 1, -2, -1]))
इनपुट
[4, 1, -2, -1]
आउटपुट
17