dp(十)* 0-1背包与完全背包的组合数问题 搞清组合数与排列数

news2025/2/25 2:26:21

目录

兑换零钱(二)_牛客题霸_牛客网(完全背包)

494. 目标和(0-1背包)

分割等和子集_牛客题霸_牛客网


兑换零钱(二)_牛客题霸_牛客网(完全背包)

描述

给定一个整数数组 nums 表示不同数额的硬币和一个正整数 target 表示总金额,请你计算并返回可以凑出总金额的的组合数。如果凑不出 target 则返回 0。

状态转移方程的推导就是利用上面,发现当背包容量为1的时候有dp[4]种方法可以凑出容量为5的方法数……最后发现dp[5]就等于其他dp[j-nums[i]]之和

初始化要设置第一个元素为1,比如

    int change(int target, vector<int>& nums) {
        // write code here
        int n = nums.size();
        vector<int> dp(target+1, 0);
        dp[0] = 1;
        for(int i = 0; i < n; ++i)    // 物品
        {
            for(int j = nums[i]; j <= target; ++j)    // 背包
            {
                dp[j] += dp[j-nums[i]];
            }
        }
        return dp[target];
    }

总结:

        1、判断是01背包还是完全背包

        2、组合数的状态转移方程都为dp[j] += dp[j-nums[i]]

        3、如果求的是组合数就先进行遍历物品,再遍历背包

             (因为物品从前到后进行拿取,有着顺序,不会重复)

              如果求得是排列数先遍历背包在遍历物品

494. 目标和(0-1背包)

给你一个整数数组 nums 和一个整数 target 。

向数组中的每个整数前添加 '+' 或 '-' ,然后串联起所有整数,可以构造一个 表达式 :

    例如,nums = [2, 1] ,可以在 2 之前添加 '+' ,在 1 之前添加 '-' ,然后串联起来得到表达式 "+2-1" 。

返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/target-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

示例 1:

输入:nums = [1,1,1,1,1], target = 3
输出:5
解释:一共有 5 种方法让最终目标和为 3 。
-1 + 1 + 1 + 1 + 1 = 3
+1 - 1 + 1 + 1 + 1 = 3
+1 + 1 - 1 + 1 + 1 = 3
+1 + 1 + 1 - 1 + 1 = 3
+1 + 1 + 1 + 1 - 1 = 3

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/target-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 1、判断是01背包问题 (从后往前)

2、组合数使用 dp[j] += dp[j-nums[i]];

3、不同的组合数 (则使用先物品再背包)

class Solution {
public:
    int findTargetSumWays(vector<int>& nums, int target) {
        int add = 0;
        for(auto &e : nums)
        {
            add += e;
        }
        if(add+target<0 || (add+target)%2 == 1)return 0;
        int left = (add+target)/2;
        vector<int> dp(left+1, 0);
        dp[0] = 1;
        for(int i = 0; i < nums.size(); ++i)
        {
            for(int j = left; j >= nums[i]; --j)
            {
                dp[j] += dp[j-nums[i]];
            }
        }
        return dp[left];
    }
};

分割等和子集_牛客题霸_牛客网

描述

给定一个只包含正整数的数组 nums ,请问能否把这个数组取出若干个数使得取出的数之和和剩下的数之和相同。

数据范围: 1≤n≤500 1≤n≤500  , 数组中的元素满足 1≤numsi≤100 1≤numsi​≤100 

输入描述:

第一行输入一个正整数 n ,表示数组 nums 的长度。

第二行输入 n 个正整数,表示数组中的值。

输出描述:

如果满足题目条件,输出 true ,否则输出 false

1、0-1背包问题

2、dp[j] += dp[j-nums[i]]

3、重不重复无所谓,先背包先物品都行

#include <iostream>
using namespace std;
#include<vector>

int main() {
    int n;
    cin>>n;
    vector<int> nums(n);
    for(int i = 0; i < n; i++)cin>>nums[i];

    int add = 0;
    for(auto &e : nums)
    {
        add+=e;
    }
    if(add%2==1)
    {
        cout<<"false"<<endl;
        return 0;
    }
    int left = add/2;
    vector<int> dp(left+1);
    dp[0] = 1;
    for(int i = 0; i < nums.size(); i++)
    {
        for(int j = left; j >= nums[i]; j--)
        {
            dp[j] += dp[j-nums[i]];
        }
    }
    if(dp[left]==0)
        cout<<"false"<<endl;
    else
        cout<<"true"<<endl;
    return 0;
}
// 64 位输出请用 printf("%lld")

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

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

相关文章

拉伯证券|社会消费复苏将是2023年主旋律

安排指出&#xff0c;兔年新年黄金周社会消费平稳复苏。全国范围看&#xff0c;依据国家税务总局增值税发票数据&#xff0c;2023年新年黄金周&#xff08;1月21日-27日&#xff0c;阴历岁除至正月初六&#xff09;&#xff0c;全国消费相关工作销售收入同比2022年新年假日添加…

Qt 进程(基本用法)

进程的使用情况&#xff1a; 运行的当前的应用中调用外部程序来实现功时调使用到进程。 比如&#xff1a;在你的运行程序中&#xff0c;开启迅雷或开启其他程序QProcess类用来 启动一个外部程序并与之通信QProcess类 常用一些函数&#xff1a; start&#xff08;&#xff09;…

Pycharm 中Torch安装方法

1.使用自带工具安装依次打开菜单&#xff1a;File->Setting点击号&#xff0c;搜索torch选择1.13.0版本安装安装错误&#xff1a;具体包含很长一段错误记录&#xff0c;如下&#xff1a;Collecting torch1.13.0Downloading https://files.pythonhosted.org/packages/ec/5e/8…

网络协议栈简单设计(tcp)

网络协议栈简单设计(tcp) 接着这篇文章写的 TCP相对于Udp&#xff0c;分为两个部分&#xff1a;连接&#xff08;三次握手、四次挥手&#xff09;、交互&#xff08;数据传输&#xff09; 三次握手 tcp包结构体定义 依照tcp包头字段定义就行&#xff1a; 注意&#xff0c;…

jenkins配置

ssh配置 选择Manager Jenkins 选择Configure System&#xff0c;进入页面一直拉到底 Remote Directory&#xff1a;是你需要从jenkins服务拷贝到远程应用服务指定的目录 高级&#xff1a;可以配置ssh密码 配置maven&#xff0c;git&#xff0c;jdk 选择 Global Tool Configur…

dpdk无锁队列rte_ring实现分析

1. 概述 rte_ring(以下简称ring)是一个高效率的无锁环形队列&#xff0c;它具有以下特点&#xff1a; FIFO队列长度是固定的&#xff0c;所有指针存放在数组中无锁实现(lockless)多消费者或单消费者出队多生产者或单消费者入队批量(bulk)出队 - 出队N个对象&#xff0c;否则失…

05.抽象工厂模式

05.抽象工厂模式 概念 抽象工厂模式&#xff1a;提供一个创建一系列相关或相互依赖对象的接口&#xff0c;而无须指定他们具体的类。抽象工厂又称为Kit模式&#xff0c;属于对象创建型模式。 抽象工厂可以将统一产品族的单独工厂封装起来&#xff0c;在正常使用中&#xff0…

08.适配器模式

08.适配器模式 概念&#xff1a; 将一个类的接口转化成用户需要的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 适配器模式可以分为类适配器和对象适配器两种&#xff0c;区别在于适配器角色对应被适配角色的适配是通过继承还是组合…

单月涨粉30w+,他们掌握引流法宝,小红书1月创作趋势是什么?

新年来到&#xff0c;在刚过去的1月&#xff0c;小红书平台涌现出哪些黑马博主&#xff1f;品牌在投放种草方面有何亮眼表现&#xff1f;为洞察小红书平台的内容创作趋势及品牌营销策略&#xff0c;新红推出1月月度榜单&#xff0c;从创作者及品牌两方面入手&#xff0c;解析月…

计算机网络-I/O多路复用机制

I/O多路复用机制 I/O多路复用&#xff08;multiplexing&#xff09;的本质是通过一种机制&#xff08;系统内核缓冲I/O数据&#xff09;&#xff0c;让单个进程可以监视多个文件描述符&#xff08;File descriptor是计算机科学中的一个术语&#xff0c;是一个用于表述指向文件的…

2.11 PID控制算法(四)补充

文章目录 1、理论1、代码3、分析3.1 比例项:3.2 比例+积分3.3 比例+积分+微分1、理论 1、代码 typedef struct {s32 Uplimit; //输出限幅s32 Downlimit; //输出限幅s32 target; // 目标输出量s3

leveldb源码解析二——SSTable

本章解析leveldb的基本组件——SSTable&#xff0c;SSTable一旦形成&#xff0c;就不会被改变&#xff0c;SSTable的操作有以下2种&#xff1a; 1、构建SSTable&#xff0c;在minor compaction和major compaction时&#xff0c;会构建SSTable&#xff0c;其中minor compaction是…

Opencv DNN C++ CPU 平台编译配置过程

Opencv DNN C CPU 平台编译配置过程 以下内容基于 windows 平台&#xff0c;实际上不同平台在基础工具齐全的情况下&#xff0c;编译过程差异并不大。 opencv 随着版本的更新&#xff0c;对于不同算子的支持也会逐步完善&#xff0c;所以尽量使用新的版本。 同时也可以把对应…

TCP滑动窗口协议与流量控制

谈到TCP的滑动窗口协议与流量控制&#xff0c;便会想起2006年去华为-3COM&#xff08;现H3C公司时&#xff09;面试时的场景。 当年毕业后&#xff0c;刚刚学了一点TCP的皮毛&#xff0c;仅仅是知道了TCP是面向连接的协议&#xff0c;以对每个报文都进行确认超时重传的机制来保…

摸鱼时间,画个吃豆人玩一下

Ⅰ . 吃豆人小游戏 Canvas API&#xff08;画布&#xff09;是在 HTML5 中新增的标签用于在网页实时生成图像&#xff1b;是一个非常适合&#xff0c;做一些有趣的小游戏 和 动画&#xff1b;下面我们来简单的写一下 这个小例子 &#x1f447; 文章目录Ⅰ . 吃豆人小游戏Ⅱ. 实…

学习嵌入式必读十本书,从C语言到ARM

学习嵌入式必读的十本书籍&#xff0c;按照C语言、数据结构、Linux、C、QT、单片机、ARM的顺序给大家推荐。 01 C语言 凡是计算机、电子、通信、自动化、机械专业的同学&#xff0c;大一的时候必学C语言&#xff0c;而且大部分高校选择的教材都是谭浩强。这本书在网上的评价褒…

【计算机程序设计思想与方法】2 什么是计算思维?

1.2 什么是计算思维? 如《【计算机程序设计思想与方法】1 什么是计算?》中所述,计算是利用计算机一步一步地执行指令来解决问题的过程,计算机科学是关于计算的科学。 正如数学家在证明数学定理时,有独特的数学思维。工程师在设计制造产品时,有独特的工程思维。艺术家在…

【验证码逆向专栏】某验“初代”滑块验证码逆向分析

声明 本文章中所有内容仅供学习交流&#xff0c;抓包内容、敏感网址、数据接口均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff0c;若有侵权&#xff0c;请联系我立即删除&#xff01; 本文章未经许可禁止转载…

【算法】递归

目录1.递归概述2.何时使用递归2.1.定义是递归的2.2.数据结构是递归的2.3.问题的求解方法是递归的3.递归模型4.应用本文参考&#xff1a; 《数据结构教程》第 5 版 李春葆 主编 1.递归概述 &#xff08;1&#xff09;在定义一个过程或函数时&#xff0c;出现直接或者间接调用自…

【微服务】Elasticsearch文档索引库操作(二)

&#x1f697;Es学习第二站~ &#x1f6a9;Es学习起始站&#xff1a;【微服务】Elasticsearch概述&环境搭建(一) &#x1f6a9;本文已收录至专栏&#xff1a;微服务探索之旅 &#x1f44d;希望您能有所收获 一.索引库操作 索引库就类似数据库表&#xff0c;mapping映射就类…