每日练习之——背包问题

完全背包

题目描述

运行代码

#include<bits/stdc++.h>
#include<iostream>
using namespace std;
const int N=1e3+3;
int n,V;
int v[N],w[N],dp[N];
int main(){
    cin>>n>>V; 
    int t=1;
    while(t--){
    for(int i=1;i<=n;++i){
        cin>>v[i]>>w[i];
    }
    memset(dp,-0x3f,sizeof(dp));
    dp[0]=0;
    int Max=0;
    for(int i=1;i<=n;++i){
        for(int j=v[i];j<=V;++j){
            dp[j]=max(dp[j],dp[j-v[i]]+w[i]);
            Max=max(Max,dp[j]);
        }
    }
    cout<<(dp[V]>0?dp[V]:0)<<endl;
}
}

代码思路

  1. 头文件和命名空间:

    • 使用了#include<bits/stdc++.h>,这是一个常用的头文件,包含了C++标准库中的大部分内容,但这不是一个推荐的做法,因为它会增加编译时间和可能引入不必要的开销。更推荐按需引入所需的头文件,如#include<vector>#include<algorithm>等。
    • using namespace std;虽方便,但在大型项目中可能导致命名冲突,建议在具体地方使用std::前缀代替。
  2. 常量定义:const int N=1e3+3;定义了数组的最大长度,这是合理的,但如果明确知道背包的最大容量或物品数量,可以进一步精确此常量。

  3. 主循环意义不明:代码中的while(t--)循环只执行一次,且t的值没有定义和改变,这个循环是冗余的,可以直接去除。

  4. 动态规划核心逻辑:

    • 动态规划数组dp[N]初始化为负无穷大,表示未放入任何物品时的价值。
    • dp[j] = max(dp[j], dp[j-v[i]] + w[i])是动态规划转移方程,表示考虑第i件物品时,容量为j的背包能装入的最大价值。
    • 优化点在于直接在循环中跟踪最大价值Max,避免最后再遍历dp[]数组寻找最大值。
  5. 输出处理:cout<<(dp[V]>0?dp[V]:0)<<endl;判断如果背包满载时的最大价值大于0,则输出该值,否则输出0,处理了背包容量不足以装入任何物品的情况。

改进思路

  • 移除了无用的while(t--)循环。
  • 修改了动态规划数组的遍历顺序,从大到小遍历j,避免了重复计算,提高了效率。
  • 明确了头文件的引入,移除了#include<bits/stdc++.h>,虽然在这个简短代码中未直接体现,但在实践中是个好习惯。
  • 使用了<climits>头文件中的INT_MIN(或直接写成-0x3f3f3f3f)代替-0x3f来初始化,更符合常规做法,虽然在这个案例中直接初始化为0也足够,因为dp数组的初始状态本应为0。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

极简编程:一行JS代码获取全球各城市当前时间!

之前在一些国际化网站看到过&#xff0c;他们展示了当前北京、纽约和伦敦的时钟&#xff0c;在一次住店的时候&#xff0c;我也看到了类似的3个时钟&#xff0c;甚至更多&#xff0c;有的会展示东京时间。 让我觉得获取一些全球重点城市的当前时间&#xff0c;会是一个很常用的…

OrangePi Kunpeng Pro开发板初体验——家庭小型服务器

引言 在开源硬件的浪潮中&#xff0c;开发板作为创新的基石&#xff0c;正吸引着全球开发者的目光。它们不仅为技术爱好者提供了实验的平台&#xff0c;更为专业开发者带来了实现复杂项目的可能性。本文将深入剖析OrangePi Kunpeng Pro开发板&#xff0c;从开箱到实际应用&…

Bootstrap 3.x 版本基础引入指南

Bootstrap 是一款广受欢迎的前端框架&#xff0c;它简化了网页设计与开发流程&#xff0c;帮助开发者快速创建响应式布局和美观的网页界面。本文将向您介绍如何在项目中引入 Bootstrap 3.x 版本的基本步骤&#xff0c;包括 CSS 和 JavaScript 文件的引用&#xff0c;以及必要的…

PyTorch的数据处理

&#x1f4a5;今天看一下 PyTorch数据通常的处理方法~ 一般我们会将dataset用来封装自己的数据集&#xff0c;dataloader用于读取数据 Dataset格式说明 &#x1f4ac;dataset定义了这个数据集的总长度&#xff0c;以及会返回哪些参数&#xff0c;模板&#xff1a; from tor…

国内信创数据库生态

国内信创数据库生态 国内信创数据库主要包括但不限于以下几种&#xff1a; 数据库类型与厂商&#xff1a; 达梦 &#xff08;武汉达梦&#xff09; 官网 https://www.dameng.com/DM8.html 人大金仓 &#xff08;北京&#xff09; 官网 https://www.kingbase.com.cn/tyxsjk/i…

Linux如何设置共享文件夹

打开虚拟机->菜单->虚拟机设置->选项->共享文件夹->总是启用。点击添加按钮->弹出添加向导->点击浏览按钮&#xff0c;从windows中选择一个文件夹&#xff0c;确定即可。

STM32_RCC

1、RCC RCC即Reset and Clock Control&#xff0c;复位和时钟控制。通过stm32f10x结构图可以看出RCC控制着stm32的AHB系统总线&#xff0c;而AHB总线又桥接APB1和APB2&#xff0c;分别通过它们控制不同的片上外设。如果要使用某个片上外设的功能&#xff0c;必须先通过…

虚拟海外仓用什么系统最好?5个步骤帮你选出适合自己仓库的WMS系统

面对国际市场越来越大的仓储需求&#xff0c;虚拟海外仓的受众还是非常广泛的。不过很多经营虚拟海外仓的企业往往都会陷入管理混乱&#xff0c;低效的怪圈。 要想突破这个经营的瓶颈&#xff0c;快速发展企业&#xff0c;选择一个适合自己的海外仓WMS系统是个不错的选择。 1…

AI音乐神器Suno V3.5进化全解析:功能升级吊炸天,让音乐创作更简单!

前言 目前&#xff0c;suno的v3.5版本已经向Pro和Premier会员开放&#xff0c;从更新当天到现在我已经使用了近2000积分&#xff0c;接下来我将v3.5的使用体验和与旧版本v3进行比较&#xff0c;让大家更直观的感受到v3.5的强大。 其中一个最屌的功能&#xff0c;我放在最后介绍…

Python深度学习基于Tensorflow(12)实战生成式模型

文章目录 Deep Dream风格迁移参考资料 Deep Dream DeepDream 是一项将神经网络学习模式予以可视化展现的实验。与孩子们观察云朵并尝试解释随机形状相类似&#xff0c;DeepDream 会过度解释并增强其在图像中看到的图案。 DeepDream为了说明CNN学习到的各特征的意义&#xff0c…

亚马逊云科技专家分享 | OPENAIGC开发者大赛能量加油站6月5日场预约开启~

由联想拯救者、AIGC开放社区、英特尔联合主办的“AI生成未来第二届拯救者杯OPENAIGC开发者大赛”自上线以来&#xff0c;吸引了广大开发者的热情参与。 为了向技术开发者、业务人员、高校学生、以及个体创业人员等参赛者们提供更充分的帮助与支持&#xff0c;AIGC开放社区特别…

一次编辑00

题目链接 一次编辑 题目描述 注意点 只能进行一次(或者零次)编辑 解答思路 首先判断两个字符串的长度&#xff0c;如果长度相差大于1&#xff0c;说明一次编辑无法通过一次编辑变换而来通过两个指针idx1和idx2指向first和second&#xff0c;初始idx1和idx2指向的都是同一个…

DOM学习

DOM学习 DOM全称是Document Object Model 文档对象模型&#xff0c;就是把文档中的标签&#xff0c;属性&#xff0c;文本&#xff0c;转换为对象来管理 大纲 HTML DOM(文档对象模型)document对象HTML DOM结点 具体案例 HTML DOM(文档对象模型) document对象 使用innerT…

《python本机环境多版本切换》-两种方式以及具体使用--venv/pyenv+pycharm测试

阿丹&#xff1a; source myenv/bin/activate 在开发使用rasa的时候发现自己安装的python环境是3.12的&#xff0c;和rasa不兼容&#xff0c;所以实践一下更换多python环境。 使用虚拟环境 在Python中使用虚拟环境来切换Python版本是一个常见的做法&#xff0c;这可以帮助你…

深入解析R语言的贝叶斯网络模型:构建、优化与预测;INLA下的贝叶斯回归;现代贝叶斯统计学方法;R语言混合效应(多水平/层次/嵌套)

目录 ①基于R语言的贝叶斯网络模型的实践应用 ②R语言贝叶斯方法在生态环境领域中的应用 ③基于R语言贝叶斯进阶:INLA下的贝叶斯回归、生存分析、随机游走、广义可加模型、极端数据的贝叶斯分析 ④基于R语言的现代贝叶斯统计学方法&#xff08;贝叶斯参数估计、贝叶斯回归、…

Java中Stack的使用详解

Stack是一种运算受限的线性表&#xff0c;其特点在于仅允许在表的一端&#xff08;即表尾&#xff09;进行插入和删除操作。这一端被称为栈顶&#xff0c;而相对的另一端则称为栈底。向一个栈插入新元素的操作称为进栈或入栈&#xff0c;它将新元素放到栈顶元素的上面&#xff…

全球前五!ATFX 2024年Q1业绩狂飙,6240亿美元交易量彰显实力

5月&#xff0c;密集发布的报告显示&#xff0c;强者恒强是差价合约行业不变的竞争逻辑。而ATFX最新展现的业绩无疑是这一逻辑的有力例证。依照惯例&#xff0c;知名行业媒体Finance Magnates日前公布了全球经纪商最为关注的2024年第一季度行业报告。报告数据显示&#xff0c;A…

对未知程序所创建的带有折叠书签的 PDF 文件书签层级全展开导致丢失的一种解决方法

对需要经常查阅、或连续长时间阅读的带有折叠书签的 PDF 文档展开书签层级&#xff0c;提高阅览导航快捷是非常有必要的。 下面是两种常用书签层级全展开的方法 1、 FreePic2Pdf 1 - 2 - 3 - 4 - 5 - 6&#xff0c;先提取后回挂 2、PdgCntEditor 载入后&#xff0c;直接保存…

【必备工具】gitee上传-保姆级教程

目录 1.gitee是什么 2.gitee怎么注册 ​编辑 3.gitee怎么提交代码 4.gitee的三板斧 Clone仓库 Q&A 1. Gitee 只有三板斧吗&#xff1f; 2. Git 教了&#xff0c;Gitee 上没有绿点怎么办&#xff1f; 3. 用户名和密码输入错误怎么办&#xff1f; 4. 操作时不小心…

智慧校园建设规划方案

在信息化浪潮的推动下&#xff0c;智慧校园的建设已成为教育现代化的必然趋势。以创新科技赋能教育&#xff0c;打造智慧校园&#xff0c;旨在提升教学品质&#xff0c;优化管理流程&#xff0c;增强学生体验。构建智慧校园需要具有前瞻性的规划方案&#xff0c;它将以教育为核…