ধরুন আমাদের কাছে ক্যান্ডি নামক সংখ্যার একটি তালিকা আছে এবং দুই ব্যক্তি সর্বাধিক সংখ্যক ক্যান্ডি সংগ্রহ করার জন্য দৌড়াচ্ছেন। এখানে রেস টার্ন ভিত্তিক, ব্যক্তি 1 প্রথমে শুরু করছে, এবং প্রতিটি পাল্লায় সে সামনে বা পেছন থেকে ক্যান্ডি তুলতে পারে। আমাদের পরীক্ষা করতে হবে যে ব্যক্তি 1 অন্যদের চেয়ে বেশি ক্যান্ডি সংগ্রহ করতে পারে কি না৷
সুতরাং, যদি ইনপুটটি ক্যান্ডির মত হয় =[1, 4, 3, 8], তাহলে আউটপুট হবে True, যেহেতু ব্যক্তি 1 প্রথম রাউন্ডে 8টি ক্যান্ডি নিতে পারে এবং দ্বিতীয় ব্যক্তি 1 বা 3, ব্যক্তি 1 বাছাই করুক না কেন। যে কোনো অবশিষ্ট ক্যান্ডি গ্রহণ করে জিততে পারেন।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
N :=ক্যান্ডির আকার
-
একটি ফাংশন পার্থক্য () সংজ্ঞায়িত করুন। এটি বাম, ডানে নিয়ে যাবে
-
যদি বাম ডানের মত হয়, তাহলে
-
ক্যান্ডি ফেরত [বাম]
-
-
সর্বোচ্চ (ক্যান্ডি [বাম] − পার্থক্য (বাম + 1, ডান)) এবং (ক্যান্ডি [ডান] − পার্থক্য (বাম, ডান −1))
-
প্রধান পদ্ধতি থেকে নিম্নলিখিতগুলি করুন -
-
পার্থক্য (0, N − 1)> 0 হলে সত্য ফেরত দিন, অন্যথায় মিথ্যা
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
class Solution: def solve(self, candies): N = len(candies) def difference(left, right): nonlocal candies if left == right: return candies[left] return max(candies[left] − difference(left + 1, right), candies[right] − difference(left, right − 1)) return difference(0, N − 1) > 0 ob = Solution() candies = [1, 4, 3, 8] print(ob.solve(candies))
ইনপুট
[1, 4, 3, 8]
আউটপুট
True