দুই খেলোয়াড় একটি লিস্ট candies-এর দুটি ছোর থেকে ক্যান্ডি নিচ্ছে। খেলোয়াড় ১ প্রথমে খেলে। প্রতিটি টার্নে তিনি সামনের বা পিছনের ক্যান্ডি নিতে পারেন। খেলোয়াড় ১ কি খেলোয়াড় ২-র চেয়ে বেশি ক্যান্ডি নিতে পারবে তা বের করতে হবে।
উদাহরণ: candies = [1, 4, 3, 8] → আউটপুট True। কারণ খেলোয়াড় ১ প্রথমে ৮ নিলে বাকি যেকোনো পক্ষ থেকে খেলোয়াড় ২ নিলে খেলোয়াড় ১ বাকিটা নিয়ে জিতে পারবে।
সমাধানের ধাপসমূহ (রিকার্সিভ DP / Minimax)
N :=
len(candies)difference(left, right)ফাংশন ডিফাইন করুন:যদি
left == right, তবেcandies[left]রিটার্ন করুন।রিটার্ন
max(candies[left] - difference(left+1, right), candies[right] - difference(left, right-1))
মেইন থেকে
difference(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