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+1res = max(res, dfs(dfs,i - 1, j - w - 1) + v);}return res;};return dfs(dfs,piles.size() - 1, k);}
};