刷代码随想录有感(108):动态规划——目标和

news2024/11/19 3:28:37

题干:

代码:

class Solution {
public:
    int findTargetSumWays(vector<int>& nums, int target) {
        int sum = 0;
        for(int i : nums) sum += i;
        if(abs(target) > sum)return 0;
        if((sum + target) % 2 != 0)return 0;

        int bagweight = (sum + target) / 2;
        vector<int>dp(bagweight + 1, 0);
        dp[0] = 1;

        for(int i = 0; i < nums.size(); i++){
            for(int j = bagweight; j >= nums[i]; j--){
                dp[j] += dp[j - nums[i]];
            }
        }
        return dp[bagweight];
    }
};

思路:把带加号的数归为甲类,带减号的归为乙类,可得方程组:

甲 + 乙 = sum ①

甲 - 乙 = target ②

(① + ②) / 2 可得甲 = (sum + target) / 2,问题转化为了将容量为甲的背包装满有多少种方法。

定义:dp[j]值代表着将容量为j的背包装满有多少种方法

递推公式:dp[j] += dp[j - nums[i]]

对递推公式的解释:

想象一下你有一个背包,可以装下一定重量的物品,现在面前有一堆物品,每个物品都有自己的重量。`dp[j]` 可以理解为:背包总重量为 `j` 时,你有多少种不同的方法装满这个背包。

现在,你面前有一个新的物品,重量是 `num`。你想知道,如果考虑这个新物品,背包总重量为 `j` 的装满方式增加多少种。

这时候,`dp[j-num]` 就变得很重要了。它表示:如果你不包括这个新物品,而是用之前的物品装满一个总重量为 `j-num` 的背包,你有多少种方法。

那么,`dp[j] += dp[j-num]` 这个操作,实际上就是在说:“如果我已经知道怎么装满一个 `j-num` 重量的背包(有 `dp[j-num]` 种方法),那么我只需要把这个新物品(重量为 `num`)加进去,就可以得到一个总重量为 `j` 的新背包了!”,感觉跟最短路径那道题有点像。

所以,每当你看到一个新的物品,你就会想:“这个物品能不能加到我之前的某个背包里呢?如果可以,那我就多了一种新的装法!”这个过程,就是通过 `dp[j] += dp[j-num]` 来实现的。

初始化:dp[0] = 1,必须初始化为1否则之后的都推不出来

之后都一样

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1838602.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高考志愿填报选专业,你是听父母还是自己选?

在就业环境如此激烈的今天&#xff0c;就读好的专业意味着在竞争中占据一定的优势&#xff0c;而在拿到高考分数后&#xff0c;如何进行专业选择让不少人伤透了脑筋。很多学生愿意遵从自身意愿&#xff0c;就读自己喜欢的专业&#xff0c;但是当他提出想要就读哪个专业的想法后…

Python爬虫小白入门(二)BeautifulSoup库

一、前言 上一篇演示了如何使用requests模块向网站发送http请求&#xff0c;获取到网页的HTML数据。这篇来演示如何使用BeautifulSoup模块来从HTML文本中提取我们想要的数据。 二、运行环境 我的运行环境如下&#xff1a; 系统版本 Windows10。 Python版本 Python3.5&#xf…

为什么人们对即将推出的 Go 1.23 迭代器感到愤怒

原文&#xff1a;gingerBill - 2024.06.17 TL;DR 它让 Go 变得太“函数式”&#xff0c;而不再是不折不扣的命令式语言。 最近&#xff0c;我在 Twitter 上看到一篇帖子&#xff0c;展示了 Go 1.23&#xff08;2024 年 8 月&#xff09;即将推出的 Go 迭代器设计。据我所知&a…

「动态规划」如何求乘积为正数的最长子数组长度?

1567. 乘积为正数的最长子数组长度https://leetcode.cn/problems/maximum-length-of-subarray-with-positive-product/description/ 给你一个整数数组nums&#xff0c;请你求出乘积为正数的最长子数组的长度。一个数组的子数组是由原数组中零个或者更多个连续数字组成的数组。…

2024年GIS专业就业现状和解决办法

GIS专业发展历史 我国从20世纪80年代初引进和研究地理信息系统(GIS) 以来&#xff0c;经过30年的飞速发展&#xff0c;地理信息已成为信息时代重要的组成部分之一&#xff0c;被广泛应用于多个领域的建模和决策支持。 在国家数字化政策的加持下&#xff0c;GIS更成为新基建下…

敏感信息加密操作,让开发的系统更加的安全可靠!!

敏感信息加密操作&#xff0c;让开发的系统更加的安全可靠&#xff01;&#xff01;Jasypt&#xff08;Java Simplified Encryption&#xff09;是一个开源的Java库&#xff0c;用于简化加密操作。https://mp.weixin.qq.com/s/sPBV8Ej46YJsElImodRjAQ

反射的原理和操作

反射是框架设计的灵魂 &#xff08;使用的前提条件&#xff1a;必须先得到代表的字节码的Class&#xff0c;Class类用于表示.class文件&#xff08;字节码&#xff09;&#xff09; 在Java中&#xff0c;反射是指在运行时动态地获取、检查和操作类、对象、方法和属性的能力。J…

第2章 Rust初体验3/8:使用Result进行错误处理:编译时错误检查增强代码安全性:猜骰子冷热游戏

讲动人的故事,写懂人的代码 2.3.9 类型的关联函数:简化对象创建和初始化 席双嘉:“那个String::new(),毫无疑问,它确实像C++中的静态成员函数。” 贾克强:“哈哈!是的,两个冒号确实让人联想到一些东西,对吧?” “这其实是Rust中的关联函数(associated function,详…

第四集《唯识与净土》

请大家打开讲义第十面。 我们讲到念佛的功德有两个&#xff1a;第一个是“现世的安乐”&#xff0c;第二个是“来世究竟的解脱”。 这个净土法门的特色&#xff0c;是一种本尊相应法。 也就是说&#xff0c;我们在整个修行破恶生善的过程当中&#xff0c;主要是要仰仗本尊的…

设计师必看|精选免费icon生成网站推荐

在平面设计过程中&#xff0c;如何收集icon素材&#xff1f;(opens in a new tab or window)&#xff1f; 在这里我们为您准备了三个免费、易用的icon生成网站&#xff0c;需要icon材料的同学&#xff0c;记得点赞收藏。 01∣即时设计 作为国内领先的在线设计平台&#xff0…

创建第一个Springboot项目(环境准备、环境存在的问题、启动时存在的问题、启动的方式)

一、环境准备 专业版创建springboot&#xff0c;直接有一个选项可以选择 社区版&#xff0c;需要下载一个spring的插件 不要直接点 install 因为这个插件是付费的&#xff0c;直接点安装只有30天使用期限 在里面找免费版本的下载 然后安装 安装完成后&#xff0c;这个插件名会变…

作为程序员,科班计算机比起非科班有很大优势吗?

在当今这个快速变化的时代&#xff0c;个人的能力与优势成为了职场竞争中的关键因素。在众多的职业选择中&#xff0c;程序员因其独特的技能和市场需求而备受青睐。 然而&#xff0c;并非所有人在18岁就决定要进入计算机行业&#xff0c;许多人都是在大学毕业之后由于种种原因…

一步步教你用Python Selenium抓取动态网页任意行数据

引言 在现代网络中&#xff0c;动态网页越来越普遍&#xff0c;这使得数据抓取变得更具挑战性。传统的静态网页抓取方法在处理动态内容时往往力不从心。本文将详细介绍如何使用Python Selenium抓取动态网页中的任意行数据&#xff0c;并结合代理IP技术以提高抓取的成功率和效率…

PostgreSQL源码分析——缓冲区管理器

这里我们分析一下PG数据库缓冲区的代码。缓冲区是十分重要的&#xff0c;对数据库的性能和稳定性有着直接的影响。缓冲区是数据库SQL计算层与外部存储&#xff08;磁盘&#xff09;交互的关键。数据页的落盘与读取&#xff0c;都要经过缓冲区。 README src/backend/storage/…

本地部署AI模型-phi3

What&#xff1a; Phi-3-Mini被认为是Microsoft计划发布的三款小型机型中的首款。据报道&#xff0c;在语言、推理、编码和数学等领域&#xff0c;它在各种基准测试中的表现优于相同大小和下一个尺寸的模型。 从本质上讲&#xff0c;语言模型是 ChatGPT、Claude、Gemini 等 AI…

WPF/C#:显示分组数据的两种方式

前言 本文介绍自己在遇到WPF对数据进行分组显示的需求时&#xff0c;可以选择的两种方案。一种方案基于ICollectionView&#xff0c;另一种方案基于IGrouping。 基于ICollectionView实现 相关cs代码&#xff1a; [ObservableProperty] private ObservableCollection<Peo…

变声方法大公开,变女声很自然的3款变声器推荐,值得收藏

将男声变成女声并且要很自然的变声器有吗&#xff1f;很多喜欢玩游戏的小伙伴们在进行游戏连麦时&#xff0c;可能为了增加趣味&#xff0c;想要试试变成女声来交流&#xff0c;或者喜欢视频剪辑创作的小伙伴们在进行视频配音时&#xff0c;不想用自己的声音出镜&#xff0c;需…

WGCLOUD的web ssh提示websocket服务连接已断开

这个问题一般是server主机没有开放端口9998&#xff0c;因为9998是web ssh的端口&#xff0c;需要开放 我们只要在防火墙&#xff0c;或者安全软件&#xff0c;把这个端口开放了就可以了

STM32HAL库--NVIC和EXTI

1. 外部中断实验 1.1 NVIC和EXTI简介 1.1.1 NVIC简介 NVIC 即嵌套向量中断控制器&#xff0c;全称 Nested vectored interrupt controller。是ARM Cortex-M处理器中用于管理中断的重要组件。负责处理中断请求&#xff0c;分配优先级&#xff0c;并协调中断的触发和响应。 它是…

Scikit-Learn支持向量机回归

Scikit-Learn支持向量机回归 1、支持向量机回归1.1、最大间隔与SVM的分类1.2、软间隔最大化1.3、支持向量机回归1.4、支持向量机回归的优缺点2、Scikit-Learn支持向量机回归2.1、Scikit-Learn支持向量机回归API2.2、支持向量机回归初体验2.3、支持向量机回归实践(加州房价预测…