每日练习之——背包问题

简介: 每日练习之——背包问题

完全背包

题目描述

运行代码

#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::前缀代替。
  1. 常量定义:const int N=1e3+3;定义了数组的最大长度,这是合理的,但如果明确知道背包的最大容量或物品数量,可以进一步精确此常量。
  2. 主循环意义不明:代码中的while(t--)循环只执行一次,且t的值没有定义和改变,这个循环是冗余的,可以直接去除。
  3. 动态规划核心逻辑:
  • 动态规划数组dp[N]初始化为负无穷大,表示未放入任何物品时的价值。
  • dp[j] = max(dp[j], dp[j-v[i]] + w[i])是动态规划转移方程,表示考虑第i件物品时,容量为j的背包能装入的最大价值。
  • 优化点在于直接在循环中跟踪最大价值Max,避免最后再遍历dp[]数组寻找最大值。
  1. 输出处理: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。
目录
相关文章
|
JavaScript 开发者
VUE基础知识:Vue.js的声明式渲染是什么?
VUE基础知识:Vue.js的声明式渲染是什么?
334 1
|
C语言 芯片
【嵌入式系统】存储器映射与寄存器映射原理
【嵌入式系统】存储器映射与寄存器映射原理
670 0
【嵌入式系统】存储器映射与寄存器映射原理
rtsp推流
rtsp推流
851 0
|
移动开发 算法 前端开发
|
8月前
|
人工智能 自然语言处理 搜索推荐
JeecgBoot AI 应用开发平台,AIGC 功能介绍
JeecgBoot推出AIGC功能模块,包含AI应用开发平台与知识库问答系统,支持AI流程编排、模型管理、知识库训练及向量库对接。基于LLM大语言模型,提供智能对话、RAG检索增强生成等功能,兼容多种大模型(如DeepSeek、Qwen等)。平台结合低代码与AIGC,适用于复杂业务场景,支持快速原型到生产部署,助力用户打造个性化智能体,如“诗词达人”或“翻译助手”,并可嵌入第三方系统提升交互能力。项目开源,欢迎体验与交流。
340 0
JeecgBoot AI 应用开发平台,AIGC 功能介绍
|
11月前
|
监控 安全 网络安全
深入解析PDCERF:网络安全应急响应的六阶段方法
PDCERF是网络安全应急响应的六阶段方法,涵盖准备、检测、抑制、根除、恢复和跟进。本文详细解析各阶段目标与操作步骤,并附图例,助读者理解与应用,提升组织应对安全事件的能力。
1555 89
|
自动驾驶 物联网 5G
什么是 5G 以及它如何工作?
【8月更文挑战第23天】
3010 0
|
安全 小程序 网络安全
Cisco-DHCP中继配置
Cisco-DHCP中继配置
349 4
|
机器学习/深度学习 数据采集 算法
深度学习在图像识别中的应用与挑战
本文探讨了深度学习技术在图像识别领域的应用,重点分析了卷积神经网络(CNN)的基本原理、优势以及面临的主要挑战。通过案例研究,展示了深度学习如何提高图像识别的准确性和效率,同时指出了数据质量、模型泛化能力和计算资源等关键因素对性能的影响。
|
应用服务中间件 程序员 开发工具
mac下安装nginx
mac下安装nginx