力扣【1049. 最后一块石头的重量 II】Java题解(背包问题)

让石头分成重量相同的两堆(尽可能相同),相撞之后剩下的石头就是最小的。进一步转化成容量为重量总喝一半的背包最多可以装多少质量的石头。这样就转化成了背包问题。

最后求结果时,我们所最多能装的时dp[target],那另一半石头就是sum-dp[target],我们所求的就是(sum-dp[target])-dp[target],也就是sum-dp[target] * 2。

csharp 复制代码
class Solution {
    public int lastStoneWeightII(int[] stones) {
        int sum = 0;
        for(int num:stones) sum += num;
        int target = sum/2;
        int[] dp = new int[target + 1];
        for(int i=0;i<dp.length;i++){
            dp[i] = 0;
        }
        for(int i=0;i<stones.length;i++){
            for(int j=target;j>=stones[i];j--){
                dp[j] = Math.max(stones[i]+dp[j-stones[i]],dp[j]);
            }
        }
        return sum-dp[target] * 2;
    }
}

题目链接

相关推荐
爱吃涮毛肚的肥肥(暂时吃不了版)15 小时前
Leetcode——181.超过经理收入的员工
算法·leetcode·职场和发展
Charlie_lll16 小时前
力扣解题-接雨水
算法·leetcode
计算机学姐16 小时前
基于SpringBoot的校园二手交易系统
java·vue.js·spring boot·后端·spring·tomcat·intellij-idea
仰泳的熊猫16 小时前
题目2580:蓝桥杯2020年第十一届省赛真题-分类计数
数据结构·c++·算法·蓝桥杯
qyzm16 小时前
牛客周赛 Round 136
数据结构·python·算法
用户6378181311916 小时前
优先队列的使用
算法
qq_3349031516 小时前
C++与人工智能框架
开发语言·c++·算法
夕珩16 小时前
Java 排序算法详解:冒泡排序、选择排序、堆排序
java·算法·排序算法
Magic--16 小时前
从入门到精通:快速排序的核心原理、实现与优化
数据结构·算法·排序算法
weixin_6495556716 小时前
C语言程序设计第四版(何钦铭、颜晖)第十章函数与程序结构之统计完全平方数
c语言·数据结构·算法