洛谷最新题解P1782旅行商的背包

洛谷 P1523 旅行商简化版【线性dp+npc问题简化版】 时间复杂度:第一维枚举后面那个人当前所在点,时间为O(n),第二维枚举前面那个人当前所在点,时间为O(n),最终时间复杂度为O(n^2),n=1000,最终时间就是1e6,这个时间复杂度是肯定可以过的。i走到j+1,j暂时不动,并且需要交换i,j位置,原本i变为j+1,j还是j,现在交换变为i变为j,j变为j+1,交换位置才能保证前面那个仍然在前面,后面那个也仍然在后面。定义f[i][j]表示后面那个人走到i这个点,前面那个人走到j这个点,并且i<j,并且1~j之间的所有点都走过一次了的最短距离。 阅读详情

这道题是一道典型的多重背包+完全,个人感觉建议降绿,蓝题不至于。

首先小S收到的第一批货肯定是使用多重背包,由于数据量过大,所以多重背包使用两种优化方法:单调队列或二进制优化。单调队列不在NOIP考察范围之内,但为了让读者开拓视野(其实主要也是因为单调队列好用),所以我们使用单调队列。

代码:

inline int read(){
    int x=0,f=1;char ch=getchar();
    while (ch<'0' || ch>'9'){if (ch=='-')f=-1;ch=getchar();}
    while ('0'<=ch && ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
    return x*f;
}
for(int i=0;i<n;i++)
      for(int v=read(),w=read(),d=read(),j=0;j<v;j++)
        for(int h=0,t=0,k=0;k*v+j<=c;k++)
        {
            re int x=dp[k*v+j]-k*w;
            while(h!=t && x>f[t-1])t--;
            q[t]=k;f[t++]=x;
            if(q[h]+d<k)h++;
            dp[k*v+j]=f[h]+k*w;
        }

小S收到的第二批奇货可以使用完全背包:

int dp[10010];
inline int read(){
    int x=0,f=1;char ch=getchar();
    while (ch<'0' || ch>'9'){if (ch=='-')f=-1;ch=getchar();}
    while ('0'<=ch && ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
    return x*f;
}
for(int i=0;i<m;i++)
      for(int v=read(),w=read(),d=read(),j=c;j>=0;j--)
        for(int k=0;k<=j;k++)
          if (dp[j-k]+(v*k+w)*k+d>dp[j])dp[j]=dp[j-k]+(v*k+w)*k+d;

最后将两者所得的结果相加即可。

上完整代码:

#include<bits/stdc++.h>
using namespace std;
const int N=1e4+1;
int n,m,c;
int q[N],f[N],dp[N];
inline int read(){
    int x=0,f=1;char ch=getchar();
    while (ch<'0' || ch>'9'){if (ch=='-')f=-1;ch=getchar();}
    while ('0'<=ch && ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
    return x*f;
}
int main(){
    n=read(),m=read(),c=read();
    for(int i=0;i<n;i++)
      for(int v=read(),w=read(),d=read(),j=0;j<v;j++)
        for(int h=0,t=0,k=0;k*v+j<=c;k++){
            re int x=dp[k*v+j]-k*w;
            while(h!=t && x>f[t-1])t--;
            q[t]=k;f[t++]=x;
            if(q[h]+d<k)h++;
            dp[k*v+j]=f[h]+k*w;
        }
    for(int i=0;i<m;i++)
      for(int v=read(),w=read(),d=read(),j=c;j>=0;j--)
        for(int k=0;k<=j;k++)
          if (dp[j-k]+(v*k+w)*k+d>dp[j])dp[j]=dp[j-k]+(v*k+w)*k+d;
    printf("%d",dp[c]);
    return 0;
}

通过截图:

背包问题看这一篇就够了(详细版) 我们常说的背包问题其实分为好多种主要分为以下几种:01背包,完全背包,多重背包,分布背包。 所有的背包问题都是在有限V体积的背包中挑选物品,物品的属性分为w[i],v[i]表示第i个物品的价值和体积。从中找出那个能得到最大价值的选物品的方案。 通俗的来讲就是给你一个背包让你去装钻石每个钻石的价值和体积都是不一样的,最后你要装到最大价值的钻石。然后输出最大价值。 想要搞清楚这几种背包首先应该明白这几种背包的区别: 01背包 (每个物品只有一个,要么只选一个要么不选) 完全背包(每个物品有无数多个) 阅读详情

相关推荐

洛谷 P1782 旅行商的背包(二进制优化下的DP)

题目描述小S坚信任何问题都可以在多项式时间内解决,于是他准备亲自去当一回旅行商。在出发之前,他购进了一些物品。这些物品共有n种,第i种体积为Vi,价值为Wi,共有Di件。他的背包体积是C。怎样装才能获得尽量多的收益呢?作为一名大神犇,他轻而易举的解决了这个问题。然而,就在他出发前,他又收到了一批奇货。这些货共有m件,第i件的价值Yi与分配的体积Xi之间的关系为:Yi=ai*Xi^2+bi*Xi+ci

Gxyhqzt的博客 1139

多重背包(洛谷)

表示,从i件物品中选,且所选物品的总体积不超过j的所有选法的集合,然后我们再选出这些方案中最有价值的一个方案我们用。种物品,每种物品有多件,而且每种物品的体积和价值不变。枚举i种物品中选几个,假如我们选。多重背包链接(洛谷)

2201_75919055的博客 594

YOLOv8+ByteTrack实战:5分钟搞定多目标跟踪(附鱼群检测调参秘籍)

本文详细介绍了如何利用YOLOv8和ByteTrack快速实现多目标跟踪,特别针对鱼群检测等复杂场景提供参数调优秘籍。通过环境配置、核心机制解析和专项调优技巧,开发者可在5分钟内搭建高效跟踪系统,适用于水产养殖、交通监控等实际应用。文章还包含工程落地方案和性能优化建议,帮助实现精准的鱼群计数与行为分析。

e1f2g的博客 1019

洛谷P1782 旅行商的背包[多重背包]

题目描述 小S坚信任何问题都可以在多项式时间内解决,于是他准备亲自去当一回旅行商。在出发之前,他购进了一些物品。这些物品共有n种,第i种体积为Vi,价值为Wi,共有Di件。他的背包体积是C。怎样装才能获得尽量多的收益呢?作为一名大神犇,他轻而易举的解决了这个问题。 然而,就在他出发前,他又收到了一批奇货。这些货共有m件,第i件的价值Yi与分配的体积Xi之间的关系为:Yi=ai*Xi^2+bi*...

weixin_33719619的博客 426

电机系列(1) - foc最基本原理、clark变换 、park变换、附代码

什么是FOC? FOC(Field-Oriented Control),直译是磁场定向控制,也被称作矢量控制 (VC,Vector Control) ,是目前无刷直流电机(BLDC)和永磁同步电机(PMSM)高效控制的最优方法之一。FOC旨在通过精确地控制磁场大小与方向,使得电机的运动转矩平稳、噪声小、效率高,并且具有高速的动态响应。 简单来说就是,FOC是一种对无刷电机的驱动控制方法,它可以让我们对无刷电机进行 “像素级” 控制,实现很多传统电机控制方法所无法达到的效果。 因为所谓的“矢量控制”其实就是

nepqiu的博客 7万+

vue3 - vite报错TypeError: crypto.hash is not a function(vue3+vite启动运行提示错误,项目无法启动且打包报错失败,详细解决排查方案教程)

vue3 vite 报错,vue3+vite启动报错:TypeError: crypto.hash is not a function,创建vue3+vite项目时报错TypeError: crypto.hash is not a function,如何解决这个问题,VUE3+VITE报错crypto.hash,vue3运行报错,vite运行报错,vue3打包报错,vite打包报错,vue3新建项目无法运行,vue3 vite创建项目直接报错了,node版本不兼容,修改了node版本还是不行,依旧报错,一直

✅ 精选推荐文章 1万+

洛谷【P1523】旅行商的背包(算法导论 15-1) 题解

P1523 旅行商简化版 题目背景 欧几里德旅行商\((Euclidean Traveling Salesman)\)问题也就是货郎担问题一直是困扰全世界数学家、计算机学家的著名问题。现有的算法都没有办法在确定型机器上在多项式时间内求出最优解,但是有办法在多项式时间内求出一个较优解。 为了简化问题,而且保证能在多项式时间内求出最优解,\(J.L.Bentley\)提出了一种叫做\(bitonic\...

weixin_34128411的博客 290

PHP实现SM2算法(附完整源码)

PHP实现SM2算法(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 4025

【DP专题】——旅行商的背包

链接:https://www.luogu.org/problemnew/show/P1782 个人看来,这道题是一道非常好的多重和完全背包练手题。 题目描述 小S坚信任何问题都可以在多项式时间内解决,于是他准备亲自去当一回旅行商。在出发之前,他购进了一些物品。这些物品共有n种,第i种体积为Vi,价值为Wi,共有Di件。他的背包体积是C。怎样装才能获得尽量多的收益呢?...

weixin_30410119的博客 276

YOLOv8【第十一章:视频追踪与流处理篇·第16节】一文搞懂,DeepStream 部署入门:NVIDIA 视频分析 SDK 与 YOLOv8 结合!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 838

python全栈入门到实战【基础篇 02】环境搭建:Python解释器与PyCharm、VSCode编辑器安装配置详解

本文详解Python环境搭建步骤。首先安装解释器(运行代码核心),需从官网下载,选3.8及以上版本(勿选2.x)。Windows安装必勾“Add Python.exe to PATH”,验证用`python --version`;Mac选universal2安装包,验证用`python3 --version`。 编辑器二选一:PyCharm社区版(免费,新手推荐),安装后需配置解释器路径;VSCode轻量,需装Python插件并选择解释器。

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 5万+

P1782 旅行商的背包 Solution

LG P1782 Solution

pystraf的博客 738

深度解析与实战:长短时记忆网络(LSTM)在股票走势预测中的应用(基于Python + PyTorch)

本文全面探讨了LSTM在股票价格预测中的应用,从理论基础到实践操作。文章首先强调了股票市场预测的重要性,并介绍了LSTM网络结构及其在处理时间序列数据中的优势。接着,详细说明了数据预处理的关键步骤,包括数据收集、清洗、特征选择和归一化。文章还讨论了LSTM模型的构建、训练和评估,并提供了Python及PyTorch的实操案例。最后,总结了LSTM在股票预测的成果,并提出了未来研究的方向,如模型优化和特征工程,旨在帮助读者掌握LSTM在股票价格预测中的应用,并探索提升模型性能的方法。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2100

P1782 旅行商的背包[混合背包,优化,数据大]

P1782 旅行商的背包 题意 旅行商的背包 题目描述 小 S 坚信任何问题都可以在多项式时间内解决,于是他准备亲自去当一回旅行商。在出发之前,他购进了一些物品。这些物品共有 nnn 种,第 iii 种体积为 ViV_iVi​,价值为 WiW_iWi​,共有 DiD_iDi​ 件。他的背包体积是 CCC。怎样装才能获得尽量多的收益呢?作为一名大神犇,他轻而易举的解决了这个问题。 然而,就在他出发前,他又收到了一批奇货。这些货共有 mmm 件,第 iii 件的价值 YiY_iYi​ 与分配的体积 XiX_i

meet snow happy 380

Altium Designer(AD)仿真实验操作指南

1:运行仿真2:设置仿真3:放置电源模块4:放置器件模块5:探针。

XU157303764的博客 8897

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

洛谷P1717 钓鱼(多重背包)

在每一个地方都可以钓任意时间的鱼,但当钓鱼的时间长了之后能钓的鱼的数量就会变成负数,,因此这是一个多重背包问题。个池塘能钓的鱼少了多少。

weixin_74754298的博客 1203

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

【洛谷】P6771 Space Elevator 太空电梯***(多重背包)

穿越隧道 没有理清所限制的高度之间的关系。 需要反复理解。 #include <bits/stdc++.h> using namespace std; const int N = 1e3 + 10, M = 5e5 + 10; int n; //int h[N],a[N],s[N]; //int hh,aa,ss; int t = 0; int f[M]; struct node{ int h; int a,s; }c[N]; bool cmp(node a, node b){ re

qq_45866781的博客 558

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

洛谷 P2760 科技庄园(多重背包,二进制优化)

乍一看有两个体积,一个是时间,一个是体力。一个很明显的多重背包问题。)个物品,我们可以使用。

weixin_74754298的博客 1318

Luogu P1782 旅行商的背包

题目传送门 卡常背包果然名不虚传 算法主体就是两种背包分开跑,先跑多重背包,再跑奇货 不知道为什么,这题二进制拆分好像要比单调队列优化快一些 然后这题毒瘤的地方就出来了: 如果一件物品的体积\(\times\)数量\(>\)背包体积,那么不用二进制拆分,当成完全背包来跑 快读一定要加 用自带的max函数也可能会T,最好手写\(if\)(这数据是得有多毒瘤) 真是一道很\((\tt{du}...

weixin_30512089的博客 240

洛谷: P1616 疯狂的采药(多重背包)

多重背包和01背包区别是可以无限次拿取同一个物品,但是01每个物品只能拿一个。另外在代码书写上,多重是正序,01是倒序。思路:多重背包问题。

m0_59925573的博客 435

洛谷 P1523 旅行商简化版(DP)

我们可以将问题转化成两个人从同一个位置出发,走不同的路,最后到达相同终点的最短路径。时,第一个人走的上一个点只能是第。的所有点都已经被走过的最短路。时,其中一个人可以从第。个点,另一个人走到第。

weixin_74754298的博客 697

dp——洛谷 P1523 旅行商简化版

https://www.luogu.org/problem/show?pid=1523 旅行商问题也建议大家取了解一下,有很多变题; 首先是一个dp 【1】题意:旅行商问题,不过要求只能单向走,就是有n个地方,要求从西往东,到最东面的地方,在从东往西返回,经过每个点一次,求最短路径 【2】分析:由于有了方向的限制,这题不再是NP难题,我们可以假设有两个人一起从西往东走,走过的点不能重复

我怎么这么菜的呢 786

Java解洛谷P2347 [NOIP1996 提高组] 砝码称重,包含完整的多重背包状态转移方程,大量注释,通俗易懂

Java解洛谷P2347 [NOIP1996 提高组] 砝码称重,包含完整的多重背包状态转移方程,大量注释,通俗易懂

qq_46237746的博客 797

背包问题(5):混合背包

混合背包就是将前面三种基本的背包问题叠加成较复杂的问题。也就是说,有的物品只可以取一次(0/1背包),有的物品可以取无限次(完全背包),有的物品可以取的次数有一个上限(多重背包)。 0/1背包与完全背包的混合比较简单。如果只有两类物品:一类物品只能取一次,另一类物品可以取无限次,那么只需在对每个物品应用转移方程时,根据物品的类别选用逆序(0/1背包)或顺序(完全背包)的循环即可。 一般可以编写如下的循环。​ for (i=1;i<=N;i++) ...

cmdos的专栏 2778

洛谷P1523 旅行商简化版(DP常用思想)

洛谷P1523 旅行商简化版 题意:一个及其简化的NPC问题,具体看题目吧。 题解:一道DP思维题,自己的想法三重循环而且写错了,路漫漫其修远。 A:这道题是一个来回的问题,那我们可以想象就是找两条完全不重合的路(也可以两个人来走两条完全不同的路),都从最西边到最东边。(DP经典思想) B:由上述的想法出发设计DP,DP[i][j]代表了,第一个人到i节点,第二个人到j的花费。要求i<j C...

weixin_43843730的博客 396
上一篇: 洛谷背包专题P2677 最大约数和
下一篇: c++二分查找(往下看,有彩蛋)
火龙果king
博客等级 码龄5年 89粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值