- Trending Categories
Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
Physics
Chemistry
Biology
Mathematics
English
Economics
Psychology
Social Studies
Fashion Studies
Legal Studies
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Program to find maximum sum of popped k elements from a list of stacks in Python
Suppose we have a list of stacks and an integer k. We have to find the maximum possible sum that can be achieved from popping off exactly k elements from any combination of the stacks.
So, if the input is like stacks = [[50, -4, -15],[2],[6, 7, 8]], k = 4, then the output will be 39, as we can pop off all 3 elements from the first stack and pop the last element of the last stack to get -15 + -4 + 50 + 8 = 39.
To solve this, we will follow these steps −
Define a function rec() . This will take i, n
if n is same as k, then
return 0
if n > k, then
return negative infinity
if i is same as count of stacks , then
return negative infinity
if i is same as count of stacks - 1, then
needed := k - n
if needed > element count of stacks[i], then
return negative infinity
otherwise,
return sum of elements of stack[i] last needed number of elements
res := -math.inf, su := 0
for sti in range size of stacks[i] - 1 to 0,
decrease by 1, dosu := su + stacks[i, sti]
localres := su + rec(i + 1, n + size of stacks[i] - sti)
res := maximum of res and localres
return maximum of res and rec(i + 1, n)
From the main method call rec(0, 0)
Let us see the following implementation to get better understanding −
Example
import math class Solution: def solve(self, stacks, k): def rec(i, n): if n == k: return 0 if n > k: return -math.inf if i == len(stacks): return -math.inf if i == len(stacks) - 1: needed = k - n if needed > len(stacks[i]): return -math.inf else: return sum(stacks[i][-needed:]) res, su = -math.inf, 0 for sti in range(len(stacks[i]) - 1, -1, -1): su += stacks[i][sti] localres = su + rec(i + 1, n + len(stacks[i]) - sti) res = max(res, localres) return max(res, rec(i + 1, n)) return rec(0, 0) ob = Solution() stacks = [ [50, -4, -15], [2], [6, 7, 8] ] k = 4 print(ob.solve(stacks, k))
Input
[[50, -4, -15],[2],[6, 7, 8]], 4
Output
39