मान लीजिए कि दो खिलाड़ी एक खेल खेल रहे हैं। जहां कई कैंडीज को एक लाइन पर रखा जाता है, और व्यक्ति 1 को संख्याओं की एक सूची दी जाती है, जिसे अंक कहा जाता है जो प्रत्येक कैंडी के बिंदु मान का प्रतिनिधित्व करता है। प्रत्येक व्यक्ति की बारी पर, वे पंक्ति के सामने से 1, 2, या 3 कैंडी चुन सकते हैं, फिर उन्हें सूची से हटा सकते हैं, और अपने अंकों के योग को अपने स्कोर में जोड़ सकते हैं। यह गेम तब समाप्त होगा जब सभी कैंडी हटा दी जाएंगी और उच्च स्कोर वाला व्यक्ति विजेता होगा। हमें यह जांचना होगा कि व्यक्ति 1 इस गेम को जीत सकता है या नहीं।
इसलिए, यदि इनपुट संख्या =[1, 1, 2, 3, 50] की तरह है, तो आउटपुट ट्रू होगा, क्योंकि व्यक्ति 1 1 कैंडी ले सकता है, तो दूसरे खिलाड़ी को 1, 2 या 3 कैंडी लेनी होगी। किसी भी स्थिति में, व्यक्ति 1 50 के मान के साथ कैंडी ले सकता है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
n :=अंकों का आकार
-
तालिका :=तीन 0 के साथ एक सरणी।
-
n - 1 से 0 की श्रेणी में i के लिए, 1 से घटाएं, करें
-
लाभ :=−inf
-
sum_val :=0
-
j के लिए i से लेकर न्यूनतम i + 3 और n तक, करें
-
sum_val :=sum_val + nums[j]
-
लाभ :=अधिकतम लाभ और (sum_val - तालिका[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