ধরুন আমাদের একটি 2d ম্যাট্রিক্স এবং আরেকটি মান k আছে, আমাদেরকে অরেক্ট্যাঙ্গেলের বৃহত্তম যোগফল খুঁজে বের করতে হবে যেখানে যোগফল ≤ k।
সুতরাং, যদি ইনপুট মত হয়
5 | −2 |
7 | 10 |
এবং k =15, তাহলে আউটপুট হবে 12, যেহেতু আমরা 15 এর থেকে কম 12 এর যোগফল পেতে আয়তক্ষেত্র [5, 7] নিতে পারি।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
n :=a
এর সারি গণনা -
m :=a
এর কলাম সংখ্যা -
উত্তর :=inf
-
0 থেকে n রেঞ্জের i1 এর জন্য, করুন
-
সারি :=m আকারের একটি তালিকা এবং 0
দিয়ে পূরণ করুন -
i1 থেকে n রেঞ্জে i2 এর জন্য, করুন
-
0 থেকে m রেঞ্জে j এর জন্য, করুন
-
সারি [j] :=সারি [j] + a[i2, j]
-
-
s :=একটি নতুন সেট
-
s
-এ 0 ঢোকান -
যোগফল :=0
-
0 থেকে m রেঞ্জে j এর জন্য, করুন
-
যোগফল :=যোগফল + সারি [j];
-
temp :=s-এর সমস্ত আইটেমের জন্য একটি তালিকা যা (সমষ্টি − k)
থেকে বড় -
যদি তাপমাত্রা> 0 এর আকার হয়, তাহলে
-
u :=সর্বনিম্ন তাপমাত্রা
-
উত্তর :=সর্বাধিক উত্তর এবং (সমষ্টি − u)
-
-
s
এর মধ্যে যোগফল সন্নিবেশ করান
-
-
-
-
উত্তর ফেরত দিন
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
শ্রেণীর সমাধান:def solve(self, a, k):n =len(a) যদি n ==0:ফেরত 0; m =len(a[0]) ans =-999999; i1 এর জন্য রেঞ্জ(n):সারি =[0]*মি; রেঞ্জে i2 এর জন্য(i1, n):রেঞ্জে j এর জন্য(m):সারি[j] +=a[i2][j] s =set() s.add(0) sum =0 রেঞ্জে j এর জন্য m):যোগফল +=সারি [j]; temp =[e এর জন্য e in s if e> (sum − k)] if len(temp)> 0:u =min(temp) ans =max(ans, sum − u) s.add(sum) return ansob =সমাধান()ম্যাট্রিক্স =[ [5, −2], [7, 10]]k =15print(ob.solve(matrix, k))
ইনপুট
<প্রে>[[5, −2],[7, 10]], 15আউটপুট
12