填满背包方案数OJ

news2024/10/6 2:31:44

目录

LintCode 炼码物品大小不重复的填满背包的方案数

 LintCode 炼码 物品大小存在重复情况

 LintCode 炼码不重复的组合个数

完全背包_牛客题霸_牛客网




LintCode 炼码物品大小不重复的填满背包的方案数

描述给出 n 个物品, 以及一个数组, nums[i]代表第i个物品的大小, 保证大小均为正数并且没有重复, 正整数 target 表示背包的大小, 找到能填满背包的方案数。
每一个物品可以使用无数次

class Solution {
public:
    int backPackIV(vector<int> &nums, int target) {
        // write your code here
        int n = nums.size();
        vector<int> dp(target+1);
        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];
    }
};

 LintCode 炼码 物品大小存在重复情况

class Solution {
public:
    /**
     * @param nums: an integer array and all positive numbers
     * @param target: An integer
     * @return: An integer
     */
    int backPackV(vector<int> &nums, int target) {
        // Write your code here
        vector<int> dp(target + 1);
        dp[0] = 1;
        for (auto a : nums) {
            for (int i = target; i >= a; --i) {
                dp[i] += dp[i - a];
            }
        }
        return dp.back();
    }
};

 LintCode 炼码不重复的组合个数

class Solution {
public:
    int backPackVI(vector<int> &nums, int target) {
        // write your code here
        vector<int> dp(target+1);
        dp[0] =1;
        for (int i = 1; i <= target; i++) {
            for (int num : nums) {
                if (num <= i) {
                    dp[i] += dp[i - num];
                }
            }
        }
        return dp[target];
    }
};

完全背包_牛客题霸_牛客网

描述

你有一个背包,最多能容纳的体积是V。

现在有n种物品,每种物品有任意多个,第i种物品的体积为vivi​ ,价值为wiwi​。

(1)求这个背包至多能装多大价值的物品?

(2)若背包恰好装满,求至多能装多大价值的物品?

数据范围: 1≤v,vi,wi≤1000 1≤v,vi​,wi​≤1000 

示例1

输入:6,2,[[5,10],[3,1]]

返回值:[10,2]

示例2

输入:8,3,[[3,10],[9,1],[10,1]]

返回值:[20,0]

说明:无法恰好装满背包。

示例3

输入:13,6,[[13,189],[17,360],[19,870],[14,184],[6,298],[16,242]]

返回值:[596,189]

说明:可以装5号物品2个,达到最大价值298*2=596,若要求恰好装满,只能装1个1号物品,价值为189.

问题1和问题2的求解过程基本一致 ,不同的是在动态规划初始化数组时,在求解问题1时其所对应的动态规划数组全部为0,在求解问题2时其所对应的动态规划数组只有第一个元素为0其余的为负无穷。之所以将动态规划数组里的元素设为负无穷,是为了进行阻断。在从前至后推进时如果在填充了当前元素后还有剩余空间,那么之前扫描过的其他元素若不能恰好填满剩余空间,则这个元素将无法被成功填充(表征为:负无穷加上一个常数还是负无穷),即这种情况将会被阻断。

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param v int整型 
     * @param n int整型 
     * @param nums int整型vector<vector<>> 
     * @return int整型vector
     */
    vector<int> knapsack(int m, int n, vector<vector<int> >& nums) {
        // write code here
        vector<int> dp(m+1, 0);
        vector<int> b(m+1, INT_MIN);
        b[0] = 0;
        vector<int> v(n);
        vector<int> w(n);
        for(int i = 0; i < n; ++i)
        {
            v[i] = (nums[i][0]);
            w[i] = (nums[i][1]);
        }
        for(int i = 0; i < n; ++i)
        {
            for(int j = v[i]; j <= m; j++)
            {
                dp[j] = max(dp[j], dp[j-v[i]]+w[i]);
                b[j] = max(b[j], b[j-v[i]]+w[i]);
            }
        }
        vector<int> res(2);
        res[0] = dp[m];
        res[1] = b[m]>0?b[m]:0;
        return res;
    }
};

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

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

相关文章

编辑PDF文件的两种方法

PDF文件具备较好的稳定性、兼容性&#xff0c;在日常工作中的应用非常广泛&#xff0c;但想要编辑文件内容就不那么容易了&#xff0c;下面来说说编辑PDF文件的两种方法。 方法一&#xff1a; 我们知道&#xff0c;查看PDF文件只需要阅读器就可以了&#xff0c;如果想对文件内…

springboot 整合 webservice服务

目录webservice百科创建一个springboot项目并导入相关依赖编写webservice接口编写实现类发布webservice浏览器访问postman调用在前一段时间用到了webservice服务&#xff0c;今天整理了一下&#xff0c;记录下来。webservice百科 Web Service是一个平台独立的&#xff0c;低耦…

Apifox调用Security权限接口

Apifox调用Security权限接口1. SpringBoot3.0集成SpringSecurity1.1 pom1.2 properties配置2. Apifox 配置2.1 配置根目录Auth2.2 ApiFox 分享调用本地接口本教程环境&#xff1a; Apifox&#xff1a;2.2.14 &#xff08;建议更新到最新版本&#xff0c;老版本Auth从父级继承可…

flowable数据表详解

爬虫组件分析目录概述需求&#xff1a;设计思路实现思路分析1.flowable2.数据表的命名规则3.ACT_RU_*4.ACT_ID_*5.ACT_HI_*数据表的介绍参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hard…

AjaxRedis问题总结

一、JQuery——Ajax实现三大方法的应用及区别&#xff08;get,post,ajax&#xff09; 1. $.get()方法 <script type"text/javascript">$(function () {$("#send").click(function () {$.get("AjaxHandler.ashx", {username: $("#use…

【操作系统】国科大《高级操作系统》思考题整理

参考用书&#xff1a;《Linux内核设计的艺术》 引言 国科大杨力祥《高级操作系统》思考题整理 思考题 为什么开始启动计算机的时候&#xff0c;执行的是BIOS代码而不是操作系统自身的代码&#xff1f;&#xff08;P1&#xff0c;3&#xff09; 加电的一瞬间&#xff0c;计算…

graphviz安装及使用、决策树生成

一、graphviz下载安装 下载网址&#xff1a;http://www.graphviz.org/download/ 选择合适版本下载 1.1 双击安装 1.2 点击下一步 1.3 点击我接受 1.4 添加至系统路径 勾选添加至当前用户的系统路径&#xff0c;创建桌面图标可选&#xff0c;点击下一步 1.5 选择安装位置 浏…

「设备树」dtb给内核的两种工作模式

一&#xff0c;传递dtb给内核对于传统bootloader提供两种工作模式&#xff1a;一是启动加载模式&#xff08;start loading&#xff09;&#xff0c;一是下载模式&#xff08;downloading&#xff09;工作在启动加载模式时&#xff0c;bootloader会自动执行bootcmd命令&#xf…

AGV移动机器人PID运动控制

PID算法基本原理 PID算法是控制行业最经典、最简单、而又最能体现反馈控制思想的算法&#xff0c;PID算法利用反馈来检测偏差信号&#xff0c;并通过偏差信号来控制被控量。而控制器本身就是比例、积分、微分三个环节的加和。其功能框如图1所示&#xff1a; 考虑在某个特定的时…

C语言-指针进阶(9.1)

目录 思维导图&#xff1a; 1. 字符指针 2. 指针数组 3. 数组指针 3.1 数组指针的定义 3.2 &数组名VS数组名 3.3 数组指针的使用 4. 数组传参和指针传参 4.1 一维数组传参 4.2 二维数组传参 4.3 一级指针传参 4.4 二级指针传参 写在最后 思维导图&#xff1a;…

年底赶进度,如何将开发风险降到最低?

1、科学规划风险策略和控制流程 针对开发流程各环节中可能存在的风险&#xff0c;项目经理需要进行项目风险分析&#xff0c;并制定符合项目特点的风险评估和监督机制&#xff0c;实行岗位负责制&#xff0c;提前制定好控制策略&#xff0c;将开发风险降到最低。 如何将开发风险…

分布式基础篇2——分布式组件

一、SpringCloud Alibaba1、简介2、为什么使用3、版本选择4、依赖选择二、SpringCloud Alibaba 组件1、Nacos作为注册中心2、OpenFeign3、Nacos作为配置中心namespaceData IDGroup同时加载多个配置文件三、Spring Cloud1、GateWay简介三大核心部分网关的使用视频来源: 【Java项…

Ansible剧本流程控制

handlers触发器 notify&#xff1a;监控上面的模块执行是否发生变化 chufa&#xff1a;自定义的任务名称&#xff0c;自动去handlers里面匹配相对应的任务名称执行动作 下方是copy了/data/copy/下的文件到server2组里的主机/data/monster/handlers/下&#xff0c;notify监控发…

如何下载指定版本的xcode

如何下载指定版本的xcode一、安装最新版本xcode二、下载指定版本xcode一、安装最新版本xcode 从苹果商店中获取并安装即可。 但是安装最新版有个风险&#xff0c;就是它有系统版本的要求&#xff0c;比如这里要求macOS版本最低是12.5 如果版本不够的话&#xff0c;可以升级系统…

【蓝桥杯基础题】2020年省赛填空题—既约分数

&#x1f451;专栏内容&#xff1a;蓝桥杯刷题⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;前路未远&#xff0c;步履不停 目录一、题目背景二、题目描述三、题目分析1.求最大公约数①辗转相减法②穷举法③辗转相除法④辗转相除法&#xff08;递归&am…

LVGL之学习篇(一)

LVGL之学习篇(一) 学习目的 LVGL简介 LVGL本身是一个图形库&#xff0c;前身是litterVGL。其作者是来自匈牙利的Gabor Kiss-Vamosikisvegabor&#xff0c;LVGL用C语音编写&#xff0c;以实现最大的兼容性(与C兼容)&#xff0c;模拟器可在没有嵌入式硬件的PC上启动嵌入式GUI设计…

MATLAB实验三

实验三 &#xff08;实验报告中附上每题的主要程序和结果&#xff09; 1、在命令行窗口中分别输入下列命令&#xff0c;对应输出结果是 A&#xff0e;命令x[-2:2] B&#xff0e;命令xzeros(1,2);x>0 C&#xff0e;命令ydiag(eye(3),1) D&#xff0e;命令[-2:2]30*eye(…

内存分页机制

文章目录内存分页的原因一级页表分页机制的原理一级页表二级页表二级页表概述地址转换启动分页机制内存分页的原因 在还未出现内存分页机制之前&#xff0c;我们都内存分段机制下工作。 但是&#xff0c;这样会有个问题。来看个下方的例子。 进程在分段机制下运行 下图&…

【学习记录】ORBSLAM2均匀化策略源码解析

在ORBSLAM中&#xff0c;为了保证特征的均匀分布使用了均匀化的策略&#xff0c;最近在尝试扩展一下均匀化的内容&#xff0c;所以仔细看了一下ORBSLAM源码里面这部分的内容&#xff0c;之前看源码的时候没有展开仔细看这一部分的代码&#xff0c;这里补充记录一下&#xff0c;…

未来SSD的接口趋势是什么?

针对SSD接口标准&#xff0c;目前业内有两大组织&#xff1a;PCI-SIG&#xff1a;这个就是定义pcie协议标准的那个组织&#xff0c;我们常见的传统接口M.2, U.2, 2.5英寸的接口都归这个组织定义规范。M.2&#xff0c;U.2起源与客户端&#xff0c;也是企业级当前最常用的接口形式…