当前位置: 首页 > news >正文

算法基础之01背包问题

01背包问题

  • 核心思想:

    • 二维数组普通写法:

      •   #include<iostream>#include<cstring>#include<algorithm>using namespace std;const int N = 1010;int f[N][N];  //存 i个物品 容量不超过j 的总价值int v[N],w[N];int n,m;int main(){cin>>n>>m;for(int i =1;i<=n;i++) scanf("%d%d" , &v[i] , &w[i]);for(int i=1;i<=n;i++){for(int j=0;j<=m;j++){f[i][j] = f[i-1][j];  //不放第i个物品的情况if(j >= v[i])  //可以放的情况{  f[i][j] = max(f[i][j] , f[i-1][j-v[i]] + w[i]);  //f[i-1]是前一个的状态 +w[i] 是现在的}}}cout<<f[n][m];  //含义: 个数不超过n 容量不超过m 情况下最大价值 return 0;}
        
    • 一维数组优化版本:

      •   int main(){cin>>n>>m;for(int i =1;i<=n;i++) scanf("%d%d" , &v[i] , &w[i]);for(int i=1;i<=n;i++){for(int j=m;j>=v[i];j--)  //逆序遍历 因为原来是用i-1更新i 逆序可以保证//用j-v[i]时 还是上一层(i-1)的 因为j> j-v[i]{f[j] = max(f[j] , f[j-v[i]] + w[i]);}}cout<<f[m];return 0;}
        
http://www.lryc.cn/news/266011.html

相关文章:

  • Git的总体认知与具体实现
  • Hadoop入门学习笔记——三、使用HDFS文件系统
  • JavaWeb—html, css, javascript, dom,xml, tomcatservlet
  • LangChain 31 模块复用Prompt templates 提示词模板
  • 深入理解 Git 分支管理:提升团队协作与开发效率
  • WPF StackPanel
  • 由正规表达式构造DFA,以及DFA的相关化简
  • 模式识别与机器学习(九):Adaboost
  • 【JAVA】分布式链路追踪技术概论
  • ZooKeeper 使用介绍和原理详解
  • 模式识别与机器学习(八):决策树
  • Pinely Round 3 (Div. 1 + Div. 2)(A~D)(有意思的题)
  • 在Linux下探索MinIO存储服务如何远程上传文件
  • 持续集成交付CICD:Linux 部署 Jira 9.12.1
  • Linux命令-查看内存、GC情况及jmap 用法
  • nginx安装letsencrypt证书
  • docker笔记1-安装与基础命令
  • VSCode软件与SCL编程
  • Opencv中的滤波器
  • <JavaEE> 基于 TCP 的 Socket 通信模型
  • [THUPC 2024 初赛] 二进制 (树状数组单点删除+单点查询)(双堆模拟set)
  • 机器学习算法(11)——集成技术(Boosting——梯度提升)
  • 使用GBASE南大通用负载均衡连接池
  • Flink 数据序列化
  • 【并发设计模式】聊聊两阶段终止模式如何优雅终止线程
  • Java实现非对称加密【详解】
  • simulinkveristandlabview联合仿真——模型导入搭建人机界面
  • k8s中Helm工具实践
  • 推荐算法架构7:特征工程(吊打面试官,史上最全!)
  • Web前端 ---- 【Vue】vue路由守卫(全局前置路由守卫、全局后置路由守卫、局部路由path守卫、局部路由component守卫)