Skip to content

Latest commit

 

History

History
52 lines (46 loc) · 1.7 KB

2218. Maximum Value of K Coins From Piles.md

File metadata and controls

52 lines (46 loc) · 1.7 KB

2218. Maximum Value of K Coins From Piles

There are n piles of coins on a table. Each pile consists of a positive number of coins of assorted denominations.

In one move, you can choose any coin on top of any pile, remove it, and add it to your wallet.

Given a list piles, where piles[i] is a list of integers denoting the composition of the ith pile from top to bottom, and a positive integer k, return the maximum total value of coins you can have in your wallet if you choose exactly k coins optimally.

Example 1:

Input: piles = [[1,100,3],[7,8,9]], k = 2
Output: 101
Explanation:
The above diagram shows the different ways we can choose k coins.
The maximum total we can obtain is 101.

Example 2:

Input: piles = [[100],[100],[100],[100],[100],[100],[1,1,1,1,1,1,700]], k = 7
Output: 706
Explanation:
The maximum total can be obtained if we choose all coins from the last pile.

Constraints:

  • n == piles.length
  • 1 <= n <= 1000
  • 1 <= piles[i][j] <= 105
  • 1 <= k <= sum(piles[i].length) <= 2000

Python:

class Solution(object):
    def maxValueOfCoins(self, piles, k):
        """
        :type piles: List[List[int]]
        :type k: int
        :rtype: int
        """
        mv = [0] * (k+1)
        pile_sum = [0] * (k+1)
        for pile in piles:
            n, sum = min(k, len(pile)), 0
            for i in range(1, n+1):
                pile_sum[i] = sum = sum + pile[i-1]
            for i in range(k, 0, -1):
                max_val = 0
                for j in range(min(i, n), -1, -1):
                    max_val = max(max_val, pile_sum[j] + mv[i-j])
                mv[i] = max_val
        return mv[k]