算法刷题Day 43 最后一块石头的重量II+目标和+一和零

news/2025/1/15 14:03:16/

Day 43 动态规划

1049. 最后一块石头的重量II

注意第二个for循环那里不要漏了等于号

class Solution {
public:int lastStoneWeightII(vector<int>& stones) {int sum = accumulate(stones.begin(), stones.end(), 0);int target = sum / 2;vector<int> dp(target + 1, 0);for (int i = 0; i < stones.size(); i++){for (int j = target; j >= stones[i]; j--) // 注意这里不要漏了等于号{dp[j] = max(dp[j], dp[j - stones[i]] + stones[i]);}}return (sum - dp[target]) - dp[target]; }
};

494. 目标和

关键是要想到:

假设加法的总和为x,那么减法对应的总和就是sum - x。

所以我们要求的是 x - (sum - x) = target

x = (target + sum) / 2

此时问题就转化为,装满容量为x的背包,有几种方法

class Solution {
public:int findTargetSumWays(vector<int>& nums, int target) {int sum = accumulate(nums.begin(), nums.end(), 0);if (abs(target) > sum) return 0;if ((sum - target) & 1){return 0;}int bagSize = (sum + target) / 2;vector<int> dp(bagSize + 1, 0);dp[0] = 1; // 为什么等于1for (int i = 0; i < nums.size(); i++){for (int j = bagSize; j >= nums[i]; j--){dp[j] += dp[j - nums[i]];}}return dp[bagSize];}
};

474. 一和零

多了一个维度,但还是0-1背包问题

class Solution {
public:int findMaxForm(vector<string>& strs, int m, int n) {vector<vector<int>> dp(m + 1, vector<int>(n + 1, 0));for (auto str : strs){int zeroNum = 0, oneNum = 0;for (auto ch : str){if (ch == '0') zeroNum++;else oneNum++;}for (int i = m; i >= zeroNum; i--){for (int j = n; j >= oneNum; j--){dp[i][j] = max(dp[i][j], dp[i - zeroNum][j - oneNum] + 1);}}}return dp[m][n];}
};

总结

0-1背包的多种应用:

  • 纯 0 - 1 背包 (opens new window)是求 给定背包容量 装满背包 的最大价值是多少。
  • 416. 分割等和子集 (opens new window)是求 给定背包容量,能不能装满这个背包。
  • 1049. 最后一块石头的重量 II (opens new window)是求 给定背包容量,尽可能装,最多能装多少
  • 494. 目标和 (opens new window)是求 给定背包容量,装满背包有多少种方法。
  • 474. 一和零是求 给定背包容量,装满背包最多有多少个物品。

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

相关文章

LeCun指出:ChatGPT缺乏创新,没什么革命性!网友:早点离开Meta做出点突破吧......

点击下方卡片&#xff0c;关注“CVer”公众号 AI/CV重磅干货&#xff0c;第一时间送达 点击进入—>CV微信技术交流群 转载自&#xff1a;机器之心 | 编辑&#xff1a;张倩 在外界看来&#xff0c;ChatGPT 是一项巨大突破&#xff0c;但图灵奖得主、Meta 首席人工智能科学家 …

ChatGPT初体验——引发一场搜索引擎的革命已箭在弦上

&#xff08; openAI注册需要接码&#xff0c;国内无法提供服务&#xff0c;需要学会科学上网&找到合适的接码网站&#xff09; 正文&#xff1a; 人工智能发展至今&#xff0c;在许多领域都取得了显著的成就。通过机器学习算法的运用&#xff0c;人工智能系统能够…

ChatGPT:革命性的对话生成技术

ChatGPT是一种基于自然语言处理和深度学习技术的对话生成模型&#xff0c;由OpenAI开发。它采用了GPT-3.5架构&#xff0c;具备了强大的语言理解和生成能力&#xff0c;使得它在对话系统领域引起了革命性的变革。本文将介绍ChatGPT的技术原理、应用场景和未来发展前景&#xff…

交通变革中的ChatGPT:当智能交通遇见大型语言模型

✦ 最近爆火的ChatGPT 是由 OpenAI 开发的一种大型语言模型 (LLM) &#xff0c;拥有超过1750亿个参数&#xff0c;特别是在自然语言处理&#xff08;NLP&#xff09;方面有着令人印象深刻的能力。ChatGPT的出现引爆各行各业&#xff0c;迅速催生出各种工程领域的应用场景。 那么…

ChatGpt能做什么,为什么说Gpt是人类历史上的第四次革命

ChatGpt是一款基于人工智能的聊天机器人。它可以模仿人类的语言风格&#xff0c;理解人类的语言&#xff0c;并且能够回答人类的问题。在这个数字化时代&#xff0c;ChatGpt成为了人们沟通的新方式。但是&#xff0c;为什么说ChatGpt是人类历史上的第四次革命呢&#xff1f; 首…

推导光流方程,阐述其背景、原理、推导方法

光流是计算机视觉中非常重要的概念&#xff0c;它主要用于描述视频中连续帧之间像素的运动变化&#xff0c;可以应用于目标追踪、运动估计等场景。 光流方程的背景 光流法假设亮度恒定&#xff0c;即场景中的一个物体在运动过程中&#xff0c;其亮度是不变的。这个假设在实际…

科大星云诗社动态20201231

【诗词背后的故事】 再见&#xff0c;易安姐姐 赵明诚离世后&#xff0c;有人造谣说他曾将一把石壶托人献给金国。面对无中生有的诬陷&#xff0c;李清照为了洗刷冤屈&#xff0c;便想把携带多年的古董字画献给宋高宗赵构。就这样&#xff0c;李清照带着沉重的古籍文物&#x…

科大星云诗社动态20201227

【诗词背后的故事】 易安姐姐突然黯淡的爱情 靖康二年&#xff0c;金朝南下攻取北宋首都汴京&#xff0c;掳走徽、钦二帝&#xff0c;北宋灭亡。随即&#xff0c;康王赵构逃亡临安&#xff0c;建立偏安政权&#xff0c;史称南宋。靖康之乱&#xff0c;山河风雨飘摇&#xff0c…