2
public int maxValueOfCoins(List<List<Integer>> piles, int k) {4
int[][] ans = new int[n + 1][2001];5
Collections.sort(piles, (List<Integer> a, List<Integer> b) -> b.size() - a.size());6
for (int i = 1; i <= k; i++) {7
for (int j = 1; j <= n; j++) {8
int sizeOfPile = piles.get(j - 1).size();9
List<Integer> pile = piles.get(j - 1);11
ans[j][i] = ans[j - 1][i];12
for (int l = 1; l <= Math.min(i, sizeOfPile); l++) {13
// Take K from this pile + remaining from previous piles14
sum += pile.get(l - 1);16
ans[j][i] = Math.max(ans[j][i], sum + ans[j - 1][rem]);