⭐️⭐️⭐️⭐️⭐️

# 題目敘述

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.

# 解題思路

# Solution

import java.util.Arrays;
import java.util.List;
class Solution {
    public int maxValueOfCoins(List<List<Integer>> piles, int k) {
        int[][] dp = new int[piles.size() + 1][k + 1];
        Arrays.fill(dp[0], 0);
        
        for (int i = 1; i <= piles.size(); i++) {
            dp[i][0] = 0;
        }
        
        for (int i = 1; i <= piles.size(); i++) {
            for (int j = 1; j <= k; j++) {
                int curr = 0;
                for (int x = 0; x < Math.min(piles.get(i - 1).size(), j); x++) {
                    curr += piles.get(i - 1).get(x);
                    dp[i][j] = Math.max(dp[i][j], curr + dp[i - 1][j - x - 1]);
                }
                
                dp[i][j] = Math.max(dp[i][j], dp[i - 1][j]);
            }
        }
        
        return dp[piles.size()][k];
    }
}


單字

denoting
表示

to represent something

片語 & 搭配詞

assorted denominations
個種面額