मान लीजिए कि हमारे पास nums नामक संख्याओं की एक सूची है, हमें दिए गए नंबरों के बीच +, -, और * जैसे किसी भी बाइनरी ऑपरेटर को जोड़कर उत्पन्न किया जा सकने वाला अधिकतम मान ज्ञात करना होगा। जैसा कि कोई भी मान्य कोष्ठक सम्मिलित करता है।
इसलिए, यदि इनपुट nums =[−6, −4, −10] जैसा है, तो आउटपुट 100 होगा, क्योंकि हम इस तरह का व्यंजक बना सकते हैं:((−6) + (−4)) * -10।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
ओपीएस :=ऑपरेटरों की एक सूची [+, -, *]
-
N:=A का आकार
-
यदि A में सभी अवयव 0 हैं, तो
-
वापसी 0
-
-
एक फ़ंक्शन को परिभाषित करें dp() । यह मैं, जम्मू ले जाएगा
-
अगर मैं j के समान हूं, तो
-
एक जोड़ी लौटाएं (ए[i], ए[i])
-
-
निम्न :=inf, उच्च :=−inf
-
k के लिए i से j − 1 की श्रेणी में, करें
-
dp(i, k) में प्रत्येक बाएँ के लिए, करें
-
dp(k + 1, j) में प्रत्येक अधिकार के लिए करें
-
ओपीएस में प्रत्येक ऑपरेटर के लिए, करें
-
रेस :=लेफ्ट सेशन राइट
-
अगर रेस <कम है, तो
-
कम :=रेस
-
-
यदि रेस> उच्च है, तो
-
उच्च:=रेस
-
-
-
-
-
-
वापसी जोड़ी (निम्न, उच्च)
-
मुख्य विधि से निम्न कार्य करें -
-
उत्तर :=डीपी(0, एन -1)
-
उत्तर का दूसरा मान लौटाएं
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
import operator class Solution: def solve(self, A): OPS = [operator.add, operator.sub, operator.mul] N = len(A) if not any(A): return 0 def dp(i, j): if i == j: return [A[i], A[i]] low = float("inf") high = float("−inf") for k in range(i, j): for left in dp(i, k): for right in dp(k + 1, j): for op in OPS: res = op(left, right) if res < low: low = res if res > high: high = res return [low, high] return dp(0, N − 1)[1] ob = Solution() nums = [−6, −4, −10] print(ob.solve(nums))
इनपुट
[−6, −4, −10]
आउटपुट
100