ধরুন দুইজন খেলোয়াড় একটি খেলা খেলছে৷ যেখানে একটি লাইনে বেশ কয়েকটি ক্যান্ডি স্থাপন করা হয়, এবং ব্যক্তি 1-কে সংখ্যার একটি তালিকা দেওয়া হয় যাকে বলা হয় সংখ্যা যা প্রতিটি ক্যান্ডির পয়েন্ট মানকে প্রতিনিধিত্ব করে। প্রতিটি ব্যক্তির পালাক্রমে, তারা লাইনের সামনে থেকে 1, 2, বা 3টি ক্যান্ডি বাছাই করতে পারে, তারপর তাদের তালিকা থেকে মুছে ফেলতে পারে এবং তাদের পয়েন্টের যোগফল তাদের স্কোরে যোগ করতে পারে। সমস্ত ক্যান্ডি মুছে ফেলা হলে এই গেমটি শেষ হবে এবং উচ্চ স্কোর সহ ব্যক্তি বিজয়ী হবে। আমাদের চেক করতে হবে ১ জন এই গেমটি জিততে পারবে কি না।
সুতরাং, যদি ইনপুটটি সংখ্যার মত হয় =[1, 1, 2, 3, 50], তাহলে আউটপুট হবে True, যেহেতু ব্যক্তি 1 1টি ক্যান্ডি নিতে পারে, তাহলে অন্য খেলোয়াড়কে 1, 2 বা 3টি ক্যান্ডি নিতে হবে। যে কোনো ক্ষেত্রে, ব্যক্তি 1 50 মূল্যের সাথে ক্যান্ডি নিতে পারে।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
n :=সংখ্যার আকার
-
টেবিল :=তিনটি 0s সহ একটি অ্যারে।
-
n − 1 থেকে 0 রেঞ্জে i জন্য, 1 দ্বারা হ্রাস করুন, করুন
-
লাভ :=−inf
-
sum_val :=0
-
j-এর জন্য i থেকে ন্যূনতম i + 3 এবং n এর মধ্যে, করুন
-
sum_val :=sum_val + সংখ্যা[j]
-
মুনাফা :=লাভের সর্বোচ্চ এবং (sum_val − table[j − i])
-
-
সেট টেবিল :=তিনটি মান সহ একটি তালিকা [লাভ, টেবিল[0], টেবিল[1]]
-
-
সারণী [0]> 0 হলে সত্য ফেরত দিন, অন্যথায় মিথ্যা
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
import math class Solution: def solve(self, nums): n = len(nums) table = [0, 0, 0] for i in range(n − 1, −1, −1): profit = −math.inf sum_val = 0 for j in range(i, min(i + 3, n)): sum_val += nums[j] profit = max(profit, sum_val − table[j − i]) table[:] = [profit, table[0], table[1]] return table[0] > 0 ob = Solution() nums = [1, 1, 2, 3, 50] print(ob.solve(nums))
ইনপুট
[1, 1, 2, 3, 50]
আউটপুট
True