【刷题篇】动态规划-01背包问题(十)

news2025/1/14 18:33:48

文章目录

  • 1、01背包
  • 2、分割等和子集
  • 3、目标和
  • 4、最后一块石头的重量 II

1、01背包

在这里插入图片描述
在这里插入图片描述

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

int main()
{
    int n,v;
    cin>>n>>v;
    vector<int> Weight(n+1);
    vector<int> Value(n+1);
    vector<int> dp1(v+1); 
    vector<int> dp2(v+1); 
    for(int i=1;i<=n;i++)
        cin>>Weight[i]>>Value[i];
    //(1)求这个背包至多能装多大价值的物品?
    for(int i=1;i<=n;i++)
    {//使用滚动数组进行优化
        for(int j=v;j-Weight[i]>=0;j--)
            dp1[j]=max(dp1[j-Weight[i]]+Value[i],dp1[j]);
    }
    cout<<dp1[v]<<endl;
    //(2)若背包恰好装满,求至多能装多大价值的物品?
    for(int j=1;j<=v;j++)
        dp2[j]=-1;
     for(int i=1;i<=n;i++)
    {//使用滚动数组进行优化
        for(int j=v;j-Weight[i]>=0;j--)
        {
            if(dp2[j-Weight[i]]!=-1)
                dp2[j]=max(dp2[j-Weight[i]]+Value[i],dp2[j]);
        }
    }
    if(dp2[v]==-1)
    {
        int a=0;
        cout<<a;
    }
    else
        cout<<dp2[v];
    return 0;
}

2、分割等和子集

给定一个非空的正整数数组 nums ,请判断能否将这些数字分成元素和相等的两部分。
在这里插入图片描述

class Solution {
public:
    bool canPartition(vector<int>& nums) {
        int n=nums.size();
        int sum=0;
        for(auto& a:nums)
        {
            sum+=a;
        }
        if(sum%2) return false;
        int end=sum/2;
        vector<bool> dp(end+1);
        //初始化
        dp[0]=true;
        for(int i=1;i<=n;i++)
        {
            for(int j=end;j>=nums[i-1];j--)
            {
                dp[j]=dp[j]||dp[j-nums[i-1]];
            }
        }
        return dp[end];
    }
};

3、目标和

给定一个正整数数组 nums 和一个整数 target 。
向数组中的每个整数前添加 ‘+’ 或 ‘-’ ,然后串联起所有整数,可以构造一个 表达式 :
例如,nums = [2, 1] ,可以在 2 之前添加 ‘+’ ,在 1 之前添加 ‘-’ ,然后串联起来得到表达式 “+2-1” 。
返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。
在这里插入图片描述

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

4、最后一块石头的重量 II

有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。
每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:
如果 x == y,那么两块石头都会被完全粉碎;
如果 x != y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。
最后,最多只会剩下一块 石头。返回此石头 最小的可能重量 。如果没有石头剩下,就返回 0。
在这里插入图片描述

class Solution {
public:
    int lastStoneWeightII(vector<int>& stones) {
        //取出sum/2的值,就是最小值了,最后结果就是sum-2*(sum/2能凑出来的最大值)
        int n=stones.size();
        int sum=0;
        for(auto &a :stones)
            sum+=a;
        int m=sum/2;
        vector<int>dp(m+1);
        for(int i=1;i<=n;i++)
        {
            for(int j=m;j>=stones[i-1];j--)
            {
                dp[j]=max(dp[j],dp[j-stones[i-1]]+stones[i-1]);
            }
        }
        return sum-2*dp[m];
    }
};

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

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

相关文章

注意力机制:SENet详解

SENet&#xff08;Squeeze-and-Excitation Networks&#xff09;是2017年提出的一种经典的通道注意力机制&#xff0c;这种注意力可以让网络更加专注于一些重要的featuremap&#xff0c;它通过对特征通道间的相关性进行建模&#xff0c;把重要的特征图进行强化来提升模型的性能…

Mysql的索引与事务理解

目录 一、Mysql索引 1、索引的概念 2、索引的特点 3、索引使用场景 4、Mysql有关索引的操作 &#xff08;1&#xff09;查询表具有的索引 &#xff08;2&#xff09;增加索引 &#xff08;3&#xff09;删除索引 5、索引实现原理 &#xff08;1&#xff09;B树 &…

详细解析什么是期权交易的获利方法

期权交易的获利方法 在期权交易之前进行充分的准备工作和风险评估是至关重要的。其中行情结构、策略方法、预期收益和风险评估&#xff0c;是期权交易成功的关键要素。它们能帮助我们更好地制定交易计划&#xff0c;控制风险&#xff0c;并追求稳定的利润。以下是对这四点的详…

深入理解冯诺依曼体系结构

文章目录 冯诺依曼体系结构概念冯诺依曼体系结构的优势冯诺依曼体系结构的现实体现 冯诺依曼体系结构概念 冯诺依曼体系结构也称普林斯顿结构&#xff0c;是现代计算机发展的基础。它的主要特点是“程序存储&#xff0c;共享数据&#xff0c;顺序执行”&#xff0c;即程序指令和…

Leetcode297_二叉树的序列化与反序列化

1.leetcode原题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 2.题目描述 序列化是将一个数据结构或者对象转换为连续的比特位的操作&#xff0c;进而可以将转换后的数据存储在一个文件或者内存中&#xff0c;同时也可以通过网络传输到另一个计算机环境&#xf…

Python | Leetcode Python题解之第51题N皇后

题目&#xff1a; 题解&#xff1a; class Solution:def solveNQueens(self, n: int) -> List[List[str]]:def generateBoard():board list()for i in range(n):row[queens[i]] "Q"board.append("".join(row))row[queens[i]] "."return b…

浅谈叉车车载电脑的市场现状

叉车的起源 叉车源于美国&#xff0c;兴于日本&#xff0c;虽然中国起步较晚&#xff0c;但是近些年来发展迅速。叉车又称叉式装载车&#xff0c;是对于成件托盘类货物进行装卸、堆垛和短距离运输&#xff0c;实现重物搬运作业的轮式工业车辆。 叉车的分类 叉车分为以上六大类…

webpack3插件CommonChunkPlugin分离vantUI和echarts,问题的webpackJsonp is not defined解决!!!

webpack3插件CommonChunkPlugin分离vantUI和echarts和报错webpackJsonp is not defined的解决 前景&#xff1a;因为项目使用的webpack3开发的场景&#xff0c;打包后的vendor很大&#xff0c;如图显示 如果不做gzip处理的话&#xff0c;大小在2M多&#xff0c;gzip后的大小是…

深入理解操作系统与计算机体系结构

文章目录 操作系统(Operator System)为什么要有操作系统操作系统是如何进行管理的为什么说操作系统是安全&#xff0c;稳定&#xff0c;高效的理解系统调用和库函数 操作系统(Operator System) 概念&#xff1a; 操作系统&#xff08;Operating System&#xff0c;简称OS&…

C++中的数据结构与算法

随处可见的红黑树 一般会用到[key,value]。 例如github中这个例子&#xff0c;第一个是访问网站&#xff0c;第二个是访问次数&#xff0c;但是这个不是静态的&#xff0c;这有个动态排序&#xff0c;并且当我们需要让相应的访问次数加1的时候&#xff0c;我们用红黑树查找的时…

刷题训练之前缀和

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;熟练掌握前缀和算法。 > 毒鸡汤&#xff1a;学习&#xff0c;学习&#xff0c;再学习 ! 学&#xff0c;然后知不足。 > 专栏选自&#xff1a;刷题…

Oracle系统参数调整【数据库实例优化系列一】

Oracle实例是:内存组件和相关的后台进程组成。这些内存组件提高了数据库的运行,而后台进程负责管理系统和内存组件。 一、SGA和实例优化 Oracle的SGA是指的系统全局区。sga是数据库运行期间使用的一段公有内存,即数据库用户都可以访问这段内存,包括: 共享池、重做日志缓冲…

分享一些实用的工具

1、amCharts5&#xff1a;模拟航线飞行/业务分布图/k线/数据分析/地图等 网址&#xff1a; JavaScript mapping library: amCharts 5https://www.amcharts.com/javascript-maps/ Demo地址&#xff1a;Chart Demos - amChartshttps://www.amcharts.com/demos/#maps 他分为amC…

Xcode隐私协议适配

1. Privacy manifest files 1.1 简介 自己App或三方SDK&#xff08;通过XCFrameworks|Swift packages|Xcode projects集成的&#xff09;需要包含一个隐私清单文件&#xff08;privacy manifest&#xff09;叫作 PrivacyInfo.xcprivacy。它是一个属性列表&#xff0c;记录了A…

【Hadoop】-HDFS的存储原理[4]

目录 前言 一、fsck命令 1、HDFS副本块数量的配置 2、fsck命令查看文件的副本数 3、block配置 二、NameNode元数据 1、edits文件 2、fsigame文件 3、NameNode元数据管理维护 4、元数据合并控制参数 5、SecondaryNameNode的作用 三、HDFS数据的读写流程 1、数据写入…

2024第十五届蓝桥杯网络安全赛项WriteUp

欢迎关注公众号【Real返璞归真】回复【蓝桥杯2024】获取完整题目附件。 排名 安全知识 错1个选择题&#xff0c;题目说的不清楚&#xff0c;没搞懂题意。肯定不能用eval。错了理论题有点遗憾。 没想到这题前端是要解析json数据&#xff0c;排除CD选了A&#xff0c;结果发现正…

AI大模型日报#0427:阿里智能体“组装工厂”开源、Meta推70M参数SceneScript模型解码真实场景

导读&#xff1a; 欢迎阅读《AI大模型日报》&#xff0c;内容基于Python爬虫和LLM自动生成。目前采用“文心一言”生成了每条资讯的摘要。 标题: BattleAgent&#xff1a;再现历史事件&#xff0c;对历史战役进行多模态动态模拟&#xff5c;大模型论文摘要: 科技论文摘要&…

百度SDK创建应用地址解析失败问题

在百度SDK的设置里先用IP白名单校验全部都通过&#xff0c;项目上线之后再改就行 0.0.0.0/0

数据结构(七)---二叉树

目录 一.树的基本概念 二.树的性质 三.二叉树 1.二叉树的基本概念 2.特殊的二叉树 &#xff08;1&#xff09;满二叉树 &#xff08;2&#xff09;完全二叉树 &#xff08;3&#xff09;二叉排序树 &#xff08;4&#xff09;平衡二叉树 3.二叉树的性质 4.完全二叉树…

安装好fedora_kde系统后的操作

文章目录 1 前言2 办公软件2.1 输入法2.1.1 安装 fcitx52.1.2 安装 fcitx5-rime2.1.3 安装 東風破2.1.4 使用 東風破 安装 郭斌勇 大神的 新世纪五笔 项目2.1.5 配置 fcitx5-rime2.1.6 重新部署 3 感谢阅读~ 1 前言 本文用的是 fedora 40 kde plasma 6。 因为有很多的软件都同时…