2022.01.15 - SX10-14.最后一块石头的重量 II

news/2024/10/30 9:36:08/

文章目录

  • 1. 题目
  • 2. 思路
    • (1) 动态规划
  • 3. 代码

1. 题目

在这里插入图片描述
在这里插入图片描述

2. 思路

(1) 动态规划

  • 将所有石头分成两堆,一堆的重量为target,则另一堆的重量为sum-target,要使最后一块石头的重量最小,就要使两堆石头的重量尽可能地接近,即target尽可能地趋近于sum/2。
  • 因此,该问题可以转化为如何挑出重量尽可能接近sum/2的石头子集。
  • 动态规划数组dp[j]表示容量为j的背包所能装的最大重量,对于每一块石头来说,均有两种状态,要么装,要么不装。
  • 对于石头i,若不装进容量为j的背包,则该背包的重量不变;若装进容量为j的背包,则该背包的重量变为容量等于j-stones[i]的背包所能装的最大重量加上石头i的重量,二者取较大值即为对于容量为j的背包来说,石头i是该装还是不该装。

3. 代码

public class Test {public static void main(String[] args) {}
}class Solution {public int lastStoneWeightII(int[] stones) {int n = stones.length;int sum = 0;for (int stone : stones) {sum += stone;}int target = sum >> 1;int[] dp = new int[target + 1];for (int i = 0; i < n; i++) {for (int j = target; j >= stones[i]; j--) {dp[j] = Math.max(dp[j], dp[j - stones[i]] + stones[i]);}}return sum - 2 * dp[target];}
}

http://www.ppmy.cn/news/155049.html

相关文章

2022.01.11 - SX10-06.不同路径

文章目录 1. 题目2. 思路(1) 动态规划 3. 代码 1. 题目 2. 思路 (1) 动态规划 对于方格[i,j]来说&#xff0c;要么从上面的方格[i-1,j]到达它&#xff0c;要么从左边的方格[i,j-1]到达它&#xff0c;因此&#xff0c;到达方格[i,j]的路径数为f(i,j)f(i-1,j)f(i,j-1)。初始化时…

2022.02.15 - SX10-31.打家劫舍 III

文章目录 1. 题目2. 思路(1) 递归动态规划 3. 代码 1. 题目 2. 思路 (1) 递归动态规划 为二叉树中的每个结点定义一个状态数组status&#xff0c;status[0]表示盗取该结点的以该结点为根的最高金额&#xff0c;status[1]表示不盗取该结点的以该结点为根的最高金额。利用递归深…

2022.02.23 - SX10-50.编辑距离

文章目录 1. 题目2. 思路(1) 动态规划 3. 代码 1. 题目 2. 思路 (1) 动态规划 题目中给出的三种操作可以简化为以下三种操作&#xff1a; 向字符串word1插入一个字符&#xff1b;向字符串word2插入一个字符&#xff1b;修改字符串word1的一个字符。 dp[i][j]表示使字符串word…

2022.02.26 - SX10-52.回文子串

文章目录 1. 题目2. 思路(1) 动态规划 3. 代码 1. 题目 2. 思路 (1) 动态规划 dp[i][j]表示字符串s的下标为[i,j]的子串是否是回文子串。当chars[i]chars[j]且下标为[i1,j-1]的子串是回文子串时&#xff0c;可判定下标为[i,j]的子串也是回文子串&#xff0c;即dp[i][j]true。…

2022.02.26 - SX10-53.最长回文子序列

文章目录 1. 题目2. 思路(1) 动态规划 3. 代码 1. 题目 2. 思路 (1) 动态规划 dp[i][j]表示字符串s的下标为[i,j]的最长回文子序列的长度。若chars[i]chars[j]&#xff0c;则dp[i][j]dp[i1][j-1]2&#xff1b;否则&#xff0c;dp[i][j]取dp[i][j-1]和dp[i1][j]中较大值。 3.…

2022.02.12 - SX10-29.打家劫舍

文章目录 1. 题目2. 思路(1) 动态规划 3. 代码 1. 题目 2. 思路 (1) 动态规划 dp[i]表示打劫前i个房屋获得的最高金额。对于第i个房屋&#xff0c;有两种选择&#xff0c;若实施打劫&#xff0c;则获得的金额为dp[i-2]nums[i]&#xff1b;若不实施打劫&#xff0c;则获得的金…

2022.02.17 - SX10-39.买卖股票的最好时机含手续费

文章目录 1. 题目2. 思路(1) 动态规划 3. 代码 1. 题目 2. 思路 (1) 动态规划 只需在计算dp[i][1]时&#xff0c;考虑前一天持有股票而这一天卖出的情况下&#xff0c;减去手续费即可。 3. 代码 public class Test {public static void main(String[] args) {} }class Solu…

2022.02.02 - SX10-24.完全平方数

文章目录 1. 题目2. 思路(1) 动态规划 3. 代码 1. 题目 2. 思路 (1) 动态规划 dp[i]表示和为i的完全平方数的最少数量&#xff0c;则可以枚举[1,根号i]的所有数字&#xff0c;对于数字j来说&#xff0c;dp[i]dp[i-j*j]1。对于每一个数字i&#xff0c;都要遍历其所有的[1,根号…