DeepSeek LeetCode 2218.从栈中取出 K 个硬币的最大面值和 public int maxValueOfCoins(List<List<Integer>> piles
```java
import java.util.List;
class Solution {
public int maxValueOfCoins(List<List<Integer>> piles, int k) {
// dp[t] 表示取出恰好 t 个硬币的最大总价值
int[] dp = new int[k + 1];
// 遍历每一个栈
for (List<Integer> pile : piles) {
int size = pile.size();
// 计算前缀和,pref[i] 表示取出该栈前 i 个硬币的总价值
int[] pref = new int[size + 1];
for (int i = 1; i <= size; i++) {
pref[i] = pref[i - 1] + pile.get(i - 1);
}
// 倒序更新 dp 数组,确保每个栈最多被使用一次
for (int t = k; t >= 0; t--) {
// 尝试从当前栈中取出 j 个硬币
int maxJ = Math.min(size, t); // 不能超过栈大小和当前剩余总数
for (int j = 1; j <= maxJ; j++) {
dp[t] = Math.max(dp[t], dp[t - j] + pref[j]);
}
}
}
return dp[k];
}
}
```
更多推荐


所有评论(0)