当前位置: 首页 > news >正文

Leetcode 494. 目标和 动态规划-01背包

原题链接:Leetcode 494. 目标和
在这里插入图片描述
在这里插入图片描述

做这个题注意两点:

  1. 边界条件:dp[0][0]=1;当考虑0个元素时,他们的和为0的方案数为1
  2. 内循环j从0开始,表示他们的和为0的个数
class Solution {
public:int findTargetSumWays(vector<int>& nums, int target) {int n=nums.size();int sum=0;for(auto x:nums) sum+=x;// 原题的意思即把数组分为两个子数组,让这两个子数组的差=target// 假设数组的和为sum, 子数组1的和为a, 那么子数组2的和就是sum-a// 要让他们的差是target,即a-(sum-a)=target,2a=sum+target// 那么原题就可以转换为:在nums数组中,找到子数组的和为a的个数if(target>sum || sum+target<0 || (sum+target)%2!=0) return 0;int a=(sum+target)/2;// dp[i][j]表示在nums数组前i个元素中,子数组的和为a的方案个数vector<vector<int>> dp(n+1,vector<int>(a+1,0));// 边界条件:当考虑0个元素时,他们的和为0的方案数为1dp[0][0]=1;for(int i=1;i<=n;i++){// 注意这里j从0开始,表示他们的和为0的个数for(int j=0;j<=a;j++){dp[i][j]=dp[i-1][j];if(j>=nums[i-1]){dp[i][j]+=dp[i-1][j-nums[i-1]];}}}return dp[n][a];}
};

空间优化: 注意,01背包问题,内循环倒序

class Solution {
public:int findTargetSumWays(vector<int>& nums, int target) {int n=nums.size();int sum=0;for(auto x:nums) sum+=x;// 原题的意思即把数组分为两个子数组,让这两个子数组的差=target// 假设数组的和为sum, 子数组1的和为a, 那么子数组2的和就是sum-a// 要让他们的差是target,即a-(sum-a)=target,2a=sum+target// 那么原题就可以转换为:在nums数组中,找到子数组的和为a的个数if(target>sum || sum+target<0 || (sum+target)%2!=0) return 0;int a=(sum+target)/2;// dp[j]表示在nums数组中,子数组的和为a的方案个数vector<int> dp(a+1,0);// 边界条件:初始化,当考虑0个元素时,他们的和为0的方案数为1dp[0]=1;for(int i=0;i<n;i++){// 注意这里j从0开始,表示他们的和为0的个数for(int j=a;j>=nums[i];j--){dp[j]+=dp[j-nums[i]];}}return dp[a];}
};
http://www.dtcms.com/a/355303.html

相关文章:

  • 【踩坑记录】SpringBoot 项目报 Communications link failure 的解决方法
  • 数据结构初阶:详解双链表
  • 在angular20中使用monaco-editor
  • LLM Agent工具设计规范总结
  • Python 实现归并排序:从原理到代码
  • Ansys Electronics Desktop 2025 R2 软件界面介绍
  • open webui源码分析10-四个特征之搜索
  • 系统架构师-软件工程
  • 前端响应式设计
  • 推荐系统王树森(五)重排多样性提升
  • 银河麒麟桌面操作系统:为什么不让root直接登录图形界面?以及如何安全地解决这个问题
  • 英伟达营收和利润均超出市场预期,但盘后一度跌超5%
  • Groovy语法入门
  • [光学原理与应用-321]:皮秒深紫外激光器产品不同阶段使用的工具软件、对应的输出文件
  • 客户案例 | 国际知名内衣品牌x甄知科技,领航IT服务新征程
  • linux 网络:并发服务器及IO多路复用
  • 开发避坑指南(42):Vue3 element ui el-table单选实现方案
  • HTML静态页面实现材积计算器和材积表生成器
  • 动手学深度学习(pytorch版):第七章节—现代卷积神经网络(5)批量规范化
  • 吴炳锡:AI 时代下的湖仓一体化平台建设的思考
  • 从枯燥C++到趣味音乐:我的Windows系统底层探索之旅
  • 公共字段自动填充
  • Foundry工具大全
  • uniapp vue3 canvas实现手写签名
  • 【Node.js从 0 到 1:入门实战与项目驱动】2.4 开发工具推荐(VS Code 、IDEA及插件、终端工具、调试工具)
  • Cesium入门教程(二)环境搭建(HTML版)
  • QT:【第一个QT程序】【信号和槽】
  • 使用uni-app和Canvas生成简易双列表格布局并长按下载到本地
  • 混淆 打包 编译
  • Ovis2.5技术解密:原生分辨率与“反思模式”如何铸就新一代MLLM王者