2218. 从栈中取出 K 个硬币的最大面值和
题目链接:2218. 从栈中取出 K 个硬币的最大面值和
代码如下:
class Solution {
public:
int maxValueOfCoins(vector<vector<int>>& piles, int k) {
vector<vector<int>> memo(piles.size(), vector<int>(k + 1));
auto dfs = [&](auto&& dfs, int i, int j)->int {
if (i < 0) {
return 0;
}
int& res = memo[i][j];//注意这里是引用
if (res) {//之前计算过
return res;
}
// 不选这一组中的任何物品
res = dfs(dfs,i - 1, j);
// 枚举选哪个
int v = 0;
for (int w = 0;w < min(j, (int)piles[i].size());w++) {
v += piles[i][w];
//w从0开始,物品体积为w+1
res = max(res, dfs(dfs,i - 1, j - w - 1) + v);
}
return res;
};
return dfs(dfs,piles.size() - 1, k);
}
};