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

dijkstra 学习笔记。

同学们,我们今天来学习基础 dijkstra。

给一个序列,求总和前 \(k\) 小的子序列,分别输出它们的和。\(k,n\le 10^6\)

dijkstra 主要是用来解决一些“前 \(k\) 小/大”的问题的。具体地,我们将状态视为点,状态带权,则需要连一些满足偏序关系的边,使得“状态”是可以用小复杂度的信息表示的,“状态”到“状态”是可以在小复杂度内转移的,并且边数量级也应是可接受的。最理想的情况下应构成一棵外向树。

对,好像本质其实是优化建图。

那么来考虑这一个问题,我们发现对于一个状态,可以选定最左侧的可右移的点右移若干个(不超过下一个点),得到一个更劣的状态。所有状态都是可达的(你可以逆变换回去。)。所以我们现在每个状态有 \(\Theta(n)\) 条转移边,状态本身也要记录不少东西,不可接受。

不妨将转移边细化,或者说对不同的转移边做差分。我们可以钦定当前点只往右挪一步,代价是多记录当前点的位置。但是我们发现不用记录状态整个集合的信息了,只要知道上一个点和下一个点在哪里即可。

所以我们可以用三个数表示一个状态:\((x,y,z)\) 表示,上一个点在 \(x\) 待挪动,当前点在 \(y\),下一个点在 \(z\)。则可以转移到 \((x,y+1,z)\)\((x-1,x+1,y)\)。再多记录一个和就全对了。

这就是 dijkstra 算法的最基础应用,你可以使用它通过 P6646,快去试试吧。

http://www.wxhsa.cn/company.asp?id=3906

相关文章:

  • linux指令
  • char与varchar类型
  • 详细介绍:【MySQL】基本查询
  • 202109_鹤城杯_SQL注入
  • Madness - TryHackMe
  • hahasim 香港手机卡 没信号 解决
  • 机器人逆运动学进阶:李代数、矩阵指数与旋转流形计算
  • 第一周博文
  • HTML基础
  • CSP-S模拟21
  • 【System Beats!】第二章 信息的表示与处理
  • ZR 25 noip D3T2 题解 | 构造、数学
  • 9. LangChain4j + 整合 Spring Boot - Rainbow
  • gcc
  • 在企业内部分发 iOS App 时如何生成并应用 manifest.plist
  • CSP2025 游记
  • Luogu P14031 【MX-X20-T5】「FAOI-R7」连接时光 II
  • 第一周预习作业
  • 计算机大数据毕业设计推荐:基于Spark的新能源汽车保有量可视化分析系统 - 指南
  • csp 2025 油迹
  • 完整教程:JMeter基本介绍
  • []
  • rv
  • Source Insight 4.0安装和使用教程
  • EF Core 介绍与入门实操
  • jdk8.0中导入新证书
  • ORA-00800
  • 50期权日内交易技巧 - 指南
  • 使用overleaf编写中文
  • 9.13 CSP-S模拟21 改题记录