学习,永无止境!|

韩熙隐ario

园龄:2年11个月粉丝:1关注:0

2025-01-21 23:22阅读: 5评论: 0推荐: 0

背包问题+栈

Problem:

从栈中取出 K 个硬币的最大面值和

思路

把操作数量看作重量,价值看作物品,这就是一个背包问题,同时要注意栈堆操作次序的影响

Code

class Solution {
    public int maxValueOfCoins(List<List<Integer>> piles, int k) {
        int[] f = new int[k + 1];
        Arrays.fill(f, -1);
        f[0] = 0;
        for (List<Integer> pile : piles) {
            for (int i = k; i > 0; --i) {
                int value = 0;
                for (int t = 1; t <= pile.size(); ++t) {
                    value += pile.get(t - 1);
                    if (i >= t && f[i - t] != -1) {
                        f[i] = Math.max(f[i], f[i - t] + value);
                    }
                }
            }
        }
        return f[k];
    }
}

本文作者:韩熙隐ario

本文链接:https://www.cnblogs.com/arioya/p/18684758

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   韩熙隐ario  阅读(5)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起