ধরুন, আমাদেরকে পূর্ণসংখ্যা সম্বলিত একটি অ্যারে দেওয়া হয়েছে। আমরা একটি অপারেশন করতে পারি যেখানে আমরা অ্যারে[i] এর মানকে এর বর্গ মান দিয়ে প্রতিস্থাপন করতে পারি; বা অ্যারে[i] * অ্যারে[i]। এই ধরনের শুধুমাত্র একটি অপারেশন অনুমোদিত এবং আমাদের অপারেশনের পরে সর্বাধিক সম্ভাব্য সাবারের যোগফল ফেরত দিতে হবে। সাবয়ারে খালি হতে পারে না৷
৷সুতরাং, যদি ইনপুট অ্যারে =[4, 1, -2, -1] এর মত হয়, তাহলে আউটপুট হবে 17।
যদি আমরা অ্যারে [0]-এর মানকে এর বর্গ মান দিয়ে প্রতিস্থাপন করি, তাহলে অ্যারেটি [16, 1, -2, -1] হয়ে যায়। এটি থেকে সর্বাধিক সাবয়ারে সম্ভব [16, 1], এবং এটির সর্বাধিক যোগফল মান 16 + 1 =17।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- dp1 :=নেতিবাচক অসীম মান ধারণকারী একটি নতুন তালিকা
- dp2 :=নেতিবাচক অসীম মান ধারণকারী একটি নতুন তালিকা
- অ্যারের প্রতিটি সংখ্যার জন্য, করুন
- dp1-এর শেষে সর্বাধিক (dp1 + num-এর শেষ উপাদান), num) সন্নিবেশ করুন
- dp2-এর শেষে সর্বাধিক (dp1 + num^2-এর দ্বিতীয় শেষ উপাদান), num^2, (dp2 + num-এর শেষ উপাদান)) সন্নিবেশ করুন
- 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