मान लीजिए हमारे पास N तत्वों वाली एक सरणी A है, हमारे पास दो पूर्णांक l और r भी हैं जहां, 1 ≤ ax ≤ 10^5 और 1 ≤ l ≤ r ≤ N। सरणी से एक तत्व लेना मान लीजिए ax और उसे हटाना, और ax+1, ax+2 ... ax+R और ax-1, ax-2 ... ax-L के बराबर सभी तत्वों को भी उस सरणी से हटाना। ऐसा करने से ax अंक खर्च होंगे। हमें सरणी के सभी तत्वों को हटाने के बाद कुल लागत को अधिकतम करना है।
तो, यदि इनपुट A = [2,4,3,10,5], l = 1, r = 2 की तरह है, तो आउटपुट 18 होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
n := सरणी का आकार
max_val := 0
i के लिए 0 से n की सीमा में, करें
max_val := max_val, array[i] का अधिकतम
count_list := (max_val + 1) आकार की एक सरणी, 0 से भरें
i के लिए 0 से n की सीमा में, करें
count_list[array[i]] := count_list[array[i]] + 1
res := (max_val + 1) आकार की एक सरणी, 0 से भरें
res[0] := 0
left := left, right का न्यूनतम
num के लिए 1 से max_val + 1 की सीमा में, करें
k := num - left - 1, 0 का अधिकतम
res[num] := res[num - 1], num * count_list[num] + res[k] का अधिकतम
res[max_val] वापस करें
उदाहरण
बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
def get_max_cost(array, left, right) : n = len(array) max_val = 0 for i in range(n) : max_val = max(max_val, array[i]) count_list = [0] * (max_val + 1) for i in range(n) : count_list[array[i]] += 1 res = [0] * (max_val + 1) res[0] = 0 left = min(left, right) for num in range(1, max_val + 1) : k = max(num - left - 1, 0) res[num] = max(res[num - 1], num * count_list[num] + res[k]) return res[max_val] array = [2,4,3,10,5] left = 1 right = 2 print(get_max_cost(array, left, right))
इनपुट
[2,4,3,10,5] , 1, 2
आउटपुट
18