01背包和完全背包

文章目录

  • 01背包
    • 1、01背包暴力解法,回溯问题
    • 2、动态规划解法
    • 3、01背包代码优化
  • 完全背包
    • 1、完全背包模型

在这里插入图片描述

GitHub参考链接

01背包

1、01背包暴力解法,回溯问题

#include<bits/stdc++.h>
using namespace std;
const int N = 1e2+5;
int w[N],v[N];
int ans,n,V;
void dfs(int now,int sw,int sv){if(now==n+1){ans=max(ans,sv);return;}dfs(now+1,sw,sv);if(sw+w[now]<=V)dfs(now+1,sw+w[now],sv+v[now]);
}
int main(){ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);cin >> n >> V;for (int i = 1; i <= n; ++i) {cin >> w[i] >> v[i];}dfs(1, 0, 0);cout<<ans;return 0;
}

2、动态规划解法

#include<bits/stdc++.h> 
using namespace std;
const int N = 1e3+5;
using ll = long long;
ll dp[N][N];// dp[i][j] 表示 第 i 件物品,j 容量,的最大价值 
int n,V;
int main() {// dp[i-1][j] //不放物品// dp[i-1][j-w[i]]+v[i] //放物品 cin>>n>>V;for(int i=1;i<=n;i++){ll w,v;cin>>w>>v;for(int j=0;j<=V;j++){if(j>=w)dp[i][j]=max(dp[i-1][j],dp[i-1][j-w]+v);else dp[i][j]=dp[i-1][j];}}cout<<dp[n][V];return 0;
}

3、01背包代码优化

#include<bits/stdc++.h> 
using namespace std;
const int N = 1e3+5;
using ll = long long;
ll dp[N];
int n,V;
int main() {// dp[j] = max(dp[j],dp[j-w]+v); //表示此时物品总重量为 j 的情况下的最大价值 cin>>n>>V;for(int i=1;i<=n;i++){ll w,v;cin>>w>>v;for(int j=V;j>=w;j--){dp[j]=max(dp[j],dp[j-w]+v);}}cout<<dp[V];return 0;
}

例题:
在这里插入图片描述
分析:

在背包的基础上加了一个判断,先写背包问题的一般写法,可以过掉40%,在考虑去优化。
对于每个物品有3种选择,可以不选、选但不用魔法、选且用魔法。

示例代码:

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const ll N = 1e4+5;
ll dp[N][2];// 设状态 dp[i][j] 表示物品总重量为 i,且使用了 j 次魔法情况下的最大值 ,j = 0 or 1 
int n,w,v,M,K; int main(){ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);cin>>n>>M>>K;for(int i=1;i<=n;i++){cin>>w>>v;// 优化为1维数组来写 for(int j=M;j>=0;j--){if(j>=w){dp[j][0]=max(dp[j][0],dp[j-w][0]+v);dp[j][1]=max(dp[j][1],dp[j-w][1]+v);}if(j>=w+K){dp[j][1]=max(dp[j][1],dp[j-w-K][0]+2*v);}}}cout<<max(dp[M][0],dp[M][1]); return 0;
}

完全背包

1、完全背包模型

完全背包又叫无穷背包,即每种物品有无数个背包。
有一个体积为V的背包,商店有n个物品,每个物品有一个价值v和体积w,每个物品有无限多个,可以被拿无穷次,问能装下物品的最大价值。
设状态 dp[i]=max(dp[i],dp[i-w]+v) 表示 物品总体积为 i 的情况下的最大价值

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const ll N = 1e4+5;
ll dp[N];
int n,M; 
int main(){ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);cin>>n>>M;for(int t=1;t<=n;t++){int w,v;cin>>w>>v;for(int i=w;i<=M;i++){dp[i]=max(dp[i],dp[i-w]+v);}}cout<<dp[M];return 0;
}

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

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

相关文章

ValueError: Cannot load file containing pickled data when allow_pickle=False

问题描述 遇到报错&#xff1a;ValueError: Cannot load file containing pickled data when allow_pickleFalse 解决方案 经过查阅有人说是与numpy的版本有关&#xff0c;但是还是不要轻易改变环境中的版本&#xff0c;不一定哪个地方就会报错。这里放个解决方案&#xff1a;…

C++生成动态连接库

文章目录 一、静态连接与动态连接二、 动态链接库&#xff08;DLL&#xff09;的创建三、dll库的使用四、 动态链接链接库工作原理五、extern "C" 一、静态连接与动态连接 静态库和动态库区别是库的加载时间不同。静态库&#xff1a;在链接阶段库将会与.o目标文件一起…

YOLO中的预训练模型是否需要

这张图片显示的是使用YOLOv5&#xff08;一种流行的物体检测算法&#xff09;进行训练时的一段命令行指令以及对应的注释&#xff0c;这些注释是中文的。这里列出的是两个不同情况下的命令行用法。 上面的命令&#xff1a; python train.py --data custom.yaml --weights yolo…

C++中的凸包:convexHull使用手册【c++重要方法】

最近工作中&#xff0c;用到了凸包&#xff0c;查了一些资料&#xff0c;差不多搞明白了&#xff0c;在这里做一个总结&#xff0c;希望可以帮助到你&#xff01; 什么时候需要它&#xff1f; 如果你想要把一群散落的点&#xff0c;包裹起来。而且希望这个包裹尽可能地紧凑&a…

Vuejs中的nextTick

问题&#xff1a; 当在父组件中onMounted函数中调用一些子组件的方法时&#xff0c;提示是undefined。 原因是mounted 不会承诺所有的子组件也都一起被挂载完成。 解决方法利用 nextTick 或者setTimeout onMounted(()>{//利用nextTick 延迟执行 同 setTimeout执行nextTic…

高性能服务系列【十一】主题匹配

主题匹配核心算法就是字符串匹配&#xff0c;在字符串匹配基础上&#xff0c;会加入分段匹配需求&#xff0c;类似URL的点分式字符串。这个算法在几个场景中十分普遍。 1、应用层的路由寻址。比如反向代理中&#xff0c;根据请求中的URL&#xff0c;转发到对应的后台服务。 2…

代码随想录刷题随记6-哈希表2,双指针

代码随想录刷题随记6-哈希表2&#xff0c;双指针 454.四数相加II leetcode链接 这道题目是四个独立的数组&#xff0c;只要找到A[i] B[j] C[k] D[l] 0就可以&#xff0c;不用考虑有重复的四个元素相加等于0的情况 思路可以把A和B相加做成map,C和D相加做成另一个map。这样…

MQTT.fx和MQTTX 链接ONENET物联网提示账户或者密码错误

参考MQTT.fx和MQTTX 链接ONENET物联网开发平台避坑细节干货。_mqttx和mqttfx-CSDN博客 在输入password和username后还是提示错误&#xff0c;是因为在使用token的时候&#xff0c;key填写错误&#xff0c;将设备的密钥填入key中

How to convert .py to .ipynb in Ubuntu 22.04

How to convert .py to .ipynb in Ubuntu 22.04 jupyter nbconvertp2j 最近看到大家在用jupyter notebook&#xff0c;我也试了一下&#xff0c;感觉还不错&#xff0c;不过&#xff0c;也遇到了一些问题&#xff0c;比方说&#xff0c;我有堆的.py文件&#xff0c;如果要一个一…

堆排序-C语言

算法思想&#xff1a; 建立一个大根堆;&#xff08;将一棵普通的树转化为大根堆&#xff09; 每次将根和待排序的最后一个交换,然后再调整,循环len-1次即可; 调整为大根堆的方法&#xff1a; 从最后一棵子树开始,从后往前调整; 每次调整,从上往下; 调整为大根堆; 堆调整的代…

赛氪网亮相中国人工智能产业发展联盟会议,共筑赛事生态新篇章

2024年3月14日至15日&#xff0c;备受瞩目的中国人工智能产业发展联盟&#xff08;AIIA&#xff09;第十一次全体会议在海南海口盛大召开。作为人工智能领域的重要交流与合作平台&#xff0c;此次会议吸引了300余位联盟成员单位代表齐聚一堂&#xff0c;共襄盛举。在这场人工智…

blog-engine-07-gatsby 建极速网站和应用程序 基于React的最佳框架,具备性能、可扩展性和安全性。

拓展阅读 blog-engine-01-常见博客引擎 jekyll/hugo/Hexo/Pelican/Gatsby/VuePress/Nuxt.js/Middleman 对比 blog-engine-02-通过博客引擎 jekyll 构建 github pages 博客实战笔记 blog-engine-02-博客引擎jekyll-jekyll 博客引擎介绍 blog-engine-02-博客引擎jekyll-jekyl…

NIO与AIO

NIO与AIO NIO模型 在 LInux 环境中&#xff0c;java.nio.channels.Selector 的子类叫做 sun.nio.ch.EPollSelectorImpl &#xff0c;其底 层是基于 Epoll 模型去实现的 IO 多路复用器。 对于 Epoll 模型 我们需要了解到它底层的三个函数 在 JDK 实现的底层中&#xff0c;EPol…

某对象存储元数据集群改造流水账

软件产品&#xff1a;某厂商提供的不便具名的对象存储产品&#xff0c;核心底层技术源自HDFS和Amazon S3&#xff0c;元数据集群采用了基于MongoDB的NOSQL数据库产品和MySQL数据库产品相结合。 该产品的元数据逻辑示意图如下&#xff1a; 业务集群现状&#xff1a;当前第3期建…

面试(二)

目录 1.STL六大部件 2.STL容器 3.汇编 4.基于Freertos工训机器人面试 5.opencv常用函数 6.陀螺仪模块 JY901B 7.增量式与位置式PID区别&#xff1a; 8.MQTT 12.描述一下gcc的编译过程&#xff1f; 13.内存的最⼩存储单位以及内存的最⼩计量单位分别是&#xff1f; 14…

勾八头歌之分类回归聚类

一、机器学习概述 第1关机器学习概述 B AD B BC 第2关常见分类算法 #编码方式encodingutf8from sklearn.neighbors import KNeighborsClassifierdef knn(train_data,train_label,test_data):input:train_data用来训练的数据train_label用来训练的标签test_data用来测试的数据…

【Monero】Onion Monero Blockchain Explorer | 洋葱门罗币区块链浏览器

github&#xff1a;onion-monero-blockchain-explorer Onion Monero Blockchain Explorer特点: • 没有cookie&#xff0c;没有网络分析跟踪器&#xff0c;没有image&#xff0c; • 开源&#xff0c; • 完全用C编写&#xff0c; • 显示加密的付款 ID&#xff0c; • 显示环…

Django auth模块

【一】命令行创建用户 【1】语法 python manage.py createsuper【2】示例 用户名 默认是是电脑名称 邮箱 可以填也可以不填 密码 terminal中&#xff1a;输入密码不显示出来manage.py中&#xff1a;明文输入输入密码太简单会提示 Username (leave blank to use administra…