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

背包问题Ⅱ与二分问题

今天我对背包问题有了更深的理解我一定要写下来巩固自己的思路并且遇到新的难题二分不管了干就完了完全背包以今天写的代码展开详细描述与解释,并附上题目#define N 1001 int n, v, W[N], V[N]; int main() { cin n v; for (int i 1; i n; i) { cin V[i] W[i]; } int dp[N][N]; for (int i 1; i n; i) { for (int j 0; j v; j) { dp[i][j] dp[i - 1][j]; if (j V[i]) dp[i][j] max(dp[i][j], dp[i][j - V[i]] W[i]); } } cout dp[n][v] endl; memset(dp, 0, sizeof dp); for (int i 1; i v; i) dp[0][i] -1; for (int i 1; i n; i) { for (int j 0; j v; j) { dp[i][j] dp[i - 1][j]; if (j V[i] dp[i][j - V[i]] ! -1) dp[i][j] max(dp[i][j], dp[i][j - V[i]] W[i]); } } cout (dp[n][v] -1 ? 0 : dp[n][v]) endl; return 0; }这是一道在牛客上写的题目所以使用全局的变量更加方便根据输入要求我直接把数组设置的足够大那么就不用考虑越界的问题题目分为两道第一道就是中规中矩的动态规划但是要区别与01背包第二道需要一些数学推导简化代码第一题我们要确定下来状态转移方程dp[i][j]意为在前i个物品中所挑选的物品中总体积不超过j的情况下所能拥有的最大价值这里主要区分与01背包的是dp[i][j] max(dp[i][j],dp[i][j - V[i]] W[i])表达式这里01背包中是dp[i][j] max(dp[i][j],dp[i-1][j - V[i]] W[i])因为完全背包和01背包的本质区别是01背包中物品都只有一个然而完全背包中物品确实可以任意多个所以以我的话来讲就是在01背包中你选了当前物品就不能再次选择了就只能去前i-1个物品中找合适的选项在完全背包中你选了当前物品还可以再次选择了就可以再去前i个物品中找合适的选项第二题我们要确定下来状态转移方程dp[i][j]意为在前i个物品中所挑选的物品中总体积恰好为j的情况下所能拥有的最大价值这题中最重要的是一个数学公式推导还有初始化与返回值问题初始化主要讨论第一行与第一列dp[0][0]就是0不用质疑当i0时要讨论从0个物品中挑选出j体积的情况是不可能出现的所以要把这些位置置为-1(表示不存在这种情况)当j0要讨论从i(从1开始)个物品中挑选出0体积的情况只要不选即可所以情况存在只要置为0即可数学公式推导如下3.因为最终结果可能为-1所以需要特判一下完全背包利用滚动数组优化后的代码#define N 1001 int n, v, W[N], V[N]; int main() { cin n v; for (int i 1; i n; i) cin V[i] W[i]; int dp[N]; memset(dp, 0, sizeof dp); 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]); } } cout dp[v] endl; memset(dp, 0, sizeof dp); for (int i 1; i v; i) dp[i] -1; for (int i 1; i n; i) { for (int j V[i]; j v; j) { if(dp[j - V[i]] ! -1) dp[j] max(dp[j], dp[j - V[i]] W[i]); } } cout (dp[v]-1 ? 0 : dp[v]) endl; return 0; }01背包利用滚动数组优化后的代码#define N 1010 int n, v, M[N], V[N]; int dp[N]; int main() { cin n v; for (int i 1; i n; i) { cin V[i] M[i]; } //第一问 for (int i 1; i n; i) { for (int j v; j V[i]; j--) { dp[j] max(dp[j], M[i] dp[j - V[i]]); } } cout dp[v] endl; //第二问 memset(dp, 0, sizeof dp); for (int i 1; i v; i) dp[i] -1; for (int i 1; i n; i) { for (int j v; j V[i] dp[j - V[i]] ! -1; j--) { dp[j] max(dp[j], M[i] dp[j - V[i]]); } } cout (dp[v] -1 ? 0 : dp[v]) endl;; return 0; }如上可知两份代码有一些细微差别即遍历顺序01背包从右往左因为需要避免重复选取同一个物品我们想象下如果从左往右遍历dp[j]与dp[j-v[i]]的关系如若有一个物品体积为2我们一开始初始化了dp[2]但是当j4时会使得出现dp[j]dp[j-v[i]]的情况(即dp[2]dp[4-2])此时就违背了01背包的原则--物品只能选一次所以应该从右往左遍历这样我们就可以确保不会重复使用到第i个物品完全背包从左往右遍历完全背包则和01背包相反可以重复使用第i个物品所以因该是从左往右遍历详情见上至此01背包和完全背包已经完全解释清楚撒花*★,°*:.☆(▽)/$:*.°★*二分算法二分算法是一类模板题有规范的解题思路所以更应该把思路理清不为了一劳永逸而是加深巩固方便日后复习以之前写的代码展开详细描述与解释,并附上题目class Solution { public: vectorint searchRange(vectorint nums, int target) { if(nums.size()0) { return {-1,-1}; } int begin0; int nnums.size(); int left0,rightn-1; while(leftright) { int midleft(right-left)/2; if(nums[mid]target) { leftmid1; } else { rightmid; } } if(nums[left]!target) { return {-1,-1}; } else { beginleft; } left0,rightn-1; while(leftright) { int midleft(right-left1)/2; if(nums[mid]target) { leftmid; } else { rightmid-1; } } return {begin,right}; } };二分查找算法的本质--二段性即遇到有二段性的题目可以优先尝试使用二分算法确定左右边界在题目中会分为两种左右①leftmid1rightmid//②leftmidrightmid-1在这种情况下所选中的x是小于target与x大于等于target//x是小于等于target与x大于target判断left是否1或者right是否-1即看这个x是否可能是所需答案如若x不是所需答案需要1//-1操作跳过这个数确定中点mid在题目中会分为两种左右①midleft(right-left)/2 || midleft(right-mid1)/2如何区分这两种情况呢很简单我只需要观察right是否-1即可如若-1则括号中需要1反之则不要总结如下图算法进行的前提是leftright总结当xt时right一直向left靠拢当xt时left一直向right靠拢回到开头我们可知对于x的划分是基于二段性的即当我们求左端点时数组会被划分成小于t与大于等于t两个部分当我们求右端点时数组会被划分成大于t与小于等于t两个部分最后感谢您的观看

相关文章:

背包问题Ⅱ与二分问题

今天我对背包问题有了更深的理解,我一定要写下来,巩固自己的思路并且,遇到新的难题二分,不管了,干就完了!!!完全背包以今天写的代码展开详细描述与解释,并附上题目#define N 1001 in…...

Realtek RTL8125 2.5GbE网卡驱动安装与优化全指南:从识别到调优的完整解决方案

Realtek RTL8125 2.5GbE网卡驱动安装与优化全指南:从识别到调优的完整解决方案 【免费下载链接】realtek-r8125-dkms A DKMS package for easy use of Realtek r8125 driver, which supports 2.5 GbE. 项目地址: https://gitcode.com/gh_mirrors/re/realtek-r8125…...

AI智能体工作完整源码大公开!企业级多Agent框架,一键私有化部署

温馨提示:文末有资源获取方式最近“龙虾AI”的热度席卷技术圈,大家都在讨论如何“养殖”自己的智能体。但真正落地时,技术门槛、Token消耗与复杂的协同问题,往往让普通用户和企业望而却步。今天我们不谈概念,直接分享一…...

DeepChat一键启动揭秘:Llama3:8b镜像免配置部署教程(含端口自愈与模型缓存)

DeepChat一键启动揭秘:Llama3:8b镜像免配置部署教程(含端口自愈与模型缓存) 想体验一个完全私密、响应迅速、且能进行深度对话的AI助手吗?今天,我们将一起揭开DeepChat的神秘面纱。它不是一个需要复杂API密钥和网络调…...

小白程序员必看:收藏这份上下文工程指南,轻松玩转大模型!

本文深入浅出地介绍了上下文工程在大语言模型中的重要性,阐述了指令、示例、知识、记忆、工具和安全护栏等六种上下文类型。文章详细解析了上下文工程的四个基本阶段:撰写上下文、选择上下文、压缩上下文和隔离上下文,并强调了上下文窗口的作…...

开源编解码工具技术选型与实战指南:跨场景应用的H.264解决方案

开源编解码工具技术选型与实战指南:跨场景应用的H.264解决方案 【免费下载链接】openh264 Open Source H.264 Codec 项目地址: https://gitcode.com/gh_mirrors/op/openh264 一、价值定位:为什么开源编解码工具是技术选型的最优解 在视频技术快…...

Wan2.2-I2V-A14B镜像免配置实战:开箱即用,省去PyTorch/CUDA环境冲突烦恼

Wan2.2-I2V-A14B镜像免配置实战:开箱即用,省去PyTorch/CUDA环境冲突烦恼 1. 镜像概述与核心优势 Wan2.2-I2V-A14B是一款专为文生视频任务优化的私有部署镜像,基于RTX 4090D 24GB显存显卡和CUDA 12.4环境深度定制。这个镜像的最大特点是开箱…...

【SOC】Fastboot /DFU 烧录镜像

uboot下 使用fastboot 进行 UFS/EMMC/nand 设备烧录的大致流程: board 进入 uboot(支持 fastboot); 同时host机器安装上 fastboot 客户端 ; 2者(board与host)之间通过usb线连接,通过fastboot 协议进行交互…...

突破性解决方案:3步解决Calibre中文路径乱码,实现100%原生中文支持

突破性解决方案:3步解决Calibre中文路径乱码,实现100%原生中文支持 【免费下载链接】calibre-do-not-translate-my-path Switch my calibre library from ascii path to plain Unicode path. 将我的书库从拼音目录切换至非纯英文(中文&#x…...

Atomics探究(四)-- atomic flag

本篇将研究atomic_flag相关函数底层汇编指令,以及与其他原子操作函数进行比较,探讨其存在的意义。 1、标准描述: 2、定义 gcc 头文件中定义如下 typedef _Atomic struct { #if __GCC_ATOMIC_TEST_AND_SET_TRUEVAL == 1_Bool __val; #elseunsigned char __val; #endif } at…...

TikTok零/低播放突围:跨境账号实战破局指南

图片来源:TK云大师0播放或低播放是TikTok跨境从业者的高频痛点——行业数据显示,超68%新手账号遇初始零播放,45%带货账号因持续低播放停摆。耗时制作的内容无人问津,既耗资源又乱节奏。结合实操经验,本文从排查、挽救、…...

Local AI MusicGen教育应用:帮助学生理解音乐情绪表达方式

Local AI MusicGen教育应用:帮助学生理解音乐情绪表达方式 1. 引言:当AI成为音乐老师 想象一下,你是一位音乐老师,正在给学生讲解“悲伤”这种情绪在音乐中是如何表达的。传统的教学方式可能是播放一段肖邦的夜曲,或…...

AutoGen多智能体框架实战指南:从环境搭建到业务落地

AutoGen多智能体框架实战指南:从环境搭建到业务落地 【免费下载链接】autogen 启用下一代大型语言模型应用 项目地址: https://gitcode.com/GitHub_Trending/au/autogen 在人工智能快速发展的今天,构建能够模拟人类协作模式的智能系统已成为技术突…...

Leather Dress Collection惊艳效果:Leather_Romper皮连体衣+户外场景自然光渲染

Leather Dress Collection惊艳效果:Leather_Romper皮连体衣户外场景自然光渲染 1. 项目介绍 Leather Dress Collection 是一个基于Stable Diffusion 1.5的LoRA模型集合,专门用于生成各种皮革服装风格的图像。这个系列由Stable Yogi开发,包含…...

SEO_10个提升网站排名的实用SEO技巧分享(220 )

<h1 id"seo10seo">SEO:10个提升网站排名的实用SEO技巧分享</h1> <p>在当今互联网时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;已经成为提升网站流量和吸引潜在客户的关键手段。百度作为中国最大的搜索引擎&#xff0c;其优化规则对整…...

lite-avatar形象库入门:如何查找、预览并下载心仪的数字人形象

lite-avatar形象库入门&#xff1a;如何查找、预览并下载心仪的数字人形象 1. 数字人形象库简介 在数字人项目开发中&#xff0c;一个合适的虚拟形象往往能让用户体验大幅提升。lite-avatar形象库正是为解决这一需求而生的专业资源库。 这个基于HumanAIGC-Engineering/LiteA…...

SRAM vs ReRAM vs Flash:一张表看懂不同存内计算芯片的优缺点与选型指南

SRAM vs ReRAM vs Flash&#xff1a;存内计算芯片技术选型全景指南 在AI算力需求爆炸式增长的今天&#xff0c;传统冯诺依曼架构的"内存墙"瓶颈日益凸显。存内计算技术通过将计算单元嵌入存储阵列&#xff0c;彻底打破了数据搬运的能耗桎梏。根据最新行业报告&#x…...

探索Unity全功能的开源方案:UniHacker跨平台功能扩展工具深度指南

探索Unity全功能的开源方案&#xff1a;UniHacker跨平台功能扩展工具深度指南 【免费下载链接】UniHacker 为Windows、MacOS、Linux和Docker修补所有版本的Unity3D和UnityHub 项目地址: https://gitcode.com/GitHub_Trending/un/UniHacker Unity作为游戏开发领域的行业标…...

告别单打独斗!Apipost 8协作版数据迁移保姆级教程(含团队项目处理)

Apipost 8协作版数据迁移实战&#xff1a;从个人到团队的无缝衔接 第一次打开Apipost 8协作版时&#xff0c;我盯着那个"迁入项目"按钮犹豫了整整十分钟——作为独立开发者&#xff0c;我的旧版本里积累了237个接口文档和56个测试集合&#xff0c;它们就像我精心搭建…...

SDMatte Web端体验优化:首屏加载速度与模型预热机制说明

SDMatte Web端体验优化&#xff1a;首屏加载速度与模型预热机制说明 1. 引言 在电商、设计、内容创作等领域&#xff0c;高质量的图像抠图已经成为刚需。SDMatte作为一款专注于复杂边缘和透明物体处理的AI抠图工具&#xff0c;其Web端体验直接影响用户的使用感受。本文将详细…...

Dual-Tree Agent RAG:可控、可解释、可验证

从文本检索到方法推理的跃迁 传统RAG系统将文档切分为平面文本块&#xff0c;通过向量相似度检索来增强大模型生成。这种模式在简单事实问答中表现良好&#xff0c;却难以应对需要全局结构理解、跨章节整合和方法论复用的复杂创新任务。现有改进方案如RAPTOR&#xff08;层次摘…...

海康MVS相机+Halcon标定实战:18张图搞定畸变矫正(附标定板选购指南)

海康MVS相机Halcon标定实战&#xff1a;18张图搞定畸变矫正与标定板选购指南 工业视觉系统的精度往往取决于相机标定的准确性。在实际项目中&#xff0c;我们常遇到这样的困境&#xff1a;明明按照教程步骤操作&#xff0c;标定结果却总是不尽如人意。本文将分享一套经过实战验…...

注意力机制融合新范式:从GCNet与DANet看全局建模的演进与实战

1. 视觉注意力机制的进化之路 记得我第一次接触视觉注意力机制是在2016年&#xff0c;那时ResNet刚掀起深度学习的新浪潮。当时最让我困惑的是&#xff1a;为什么神经网络需要"注意力"&#xff1f;后来在ImageNet数据集上做实验时才明白&#xff0c;传统CNN就像近视眼…...

STP安全特性实战:如何用bpduguard和bpdufilter防止网络攻击(附真实案例)

STP安全特性实战&#xff1a;如何用bpduguard和bpdufilter防止网络攻击&#xff08;附真实案例&#xff09; 在企业网络架构中&#xff0c;生成树协议&#xff08;STP&#xff09;的安全防护常常被忽视&#xff0c;直到某天凌晨2点&#xff0c;值班工程师突然接到全网瘫痪的告警…...

新手友好:在快马平台用mc、jc相关案例轻松上手前端开发

作为一个刚接触前端开发的新手&#xff0c;我最近在InsCode(快马)平台尝试做了一个特别适合练手的小工具——代码行数统计器。这个项目用最基础的HTML、CSS和JavaScript实现&#xff0c;但包含了前端开发的几个核心概念&#xff0c;特别适合想通过实际案例学习的朋友。 项目功能…...

【Python张量计算实战宝典】:20年AI架构师亲授5大高频场景优化技巧,错过再等一年

第一章&#xff1a;张量计算基础与PyTorch/TensorFlow双框架选型指南张量是深度学习的核心数据结构&#xff0c;本质为多维数组&#xff0c;支持自动微分、GPU加速与动态/静态计算图构建。理解其内存布局&#xff08;如C-contiguous vs. Fortran-contiguous&#xff09;、广播机…...

2026必看:八款热门AI编程工具横评

一、AI编程工具榜单综述当下AI技术全面渗透软件开发领域&#xff0c;各类AI编程工具大幅降低了开发门槛、提升了编码效率&#xff0c;成为开发者必备的效率神器。本次横评精选海内外8款主流产品&#xff0c;覆盖AI原生IDE、插件式编程助手等不同形态&#xff0c;全方位盘点各工…...

通义千问3-Reranker-0.6B效果惊艳:数学证明步骤间逻辑连贯性重排序

通义千问3-Reranker-0.6B效果惊艳&#xff1a;数学证明步骤间逻辑连贯性重排序 1. 模型介绍与核心能力 通义千问3-Reranker-0.6B是Qwen3 Embedding模型系列的最新成员&#xff0c;专门针对文本重排序任务进行了深度优化。这个6亿参数的模型虽然体积小巧&#xff0c;但在数学证…...

OpenGL之标准化设备坐标(Normalized Device Coordinate =NDC)

NDC坐标本质是比例1. 设备无关性NDC 使图形渲染与屏幕分辨率无关。无论屏幕是 1280720 还是 19201080&#xff0c;同样的 NDC 坐标都会渲染出相同比例的图形&#xff08;图形会随着分辨率变化而自动拉伸&#xff09;&#xff0c;表现如下&#xff1a;┌────────────…...

实战构建c盘清理桌面应用,快马ai生成可部署完整解决方案

今天想和大家分享一个实战项目&#xff1a;用Python开发一个C盘清理桌面应用。这个工具不仅能解决日常C盘空间不足的烦恼&#xff0c;还具备完整的图形界面和实用功能。最近在InsCode(快马)平台上尝试了快速生成和部署&#xff0c;整个过程特别顺畅。 项目背景与核心功能 开发这…...