EagleBear2002 的博客

这里必须根绝一切犹豫,这里任何怯懦都无济于事

题目链接:P1081 [NOIP 2012 提高组] 开车旅行 - 洛谷

题目描述

小 $\text{A}$ 和小 $\text{B}$ 决定利用假期外出旅行,他们将想去的城市从 $1 $ 到 $n$ 编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市 $i$ 的海拔高度为$h_i$,城市 $i$ 和城市 $j$ 之间的距离 $d_{i,j}$ 恰好是这两个城市海拔高度之差的绝对值,即 $d_{i,j}=|h_i-h_j|$。

旅行过程中,小 $\text{A}$ 和小 $\text{B}$ 轮流开车,第一天小 $\text{A}$ 开车,之后每天轮换一次。他们计划选择一个城市 $s$ 作为起点,一直向东行驶,并且最多行驶 $x$ 公里就结束旅行。

小 $\text{A}$ 和小 $\text{B}$ 的驾驶风格不同,小 $\text{B}$ 总是沿着前进方向选择一个最近的城市作为目的地,而小 $\text{A}$ 总是沿着前进方向选择第二近的城市作为目的地(注意:本题中如果当前城市到两个城市的距离相同,则认为离海拔低的那个城市更近)。如果其中任何一人无法按照自己的原则选择目的城市,或者到达目的地会使行驶的总距离超出 $x$ 公里,他们就会结束旅行。

阅读全文 »

本题是四边形不等式的应用。

题目描述

高速公路旁边有一些村庄。高速公路表示为整数轴,每个村庄的位置用单个整数坐标 $X_i$ 标识。没有两个在同样地方的村庄。两个位置之间的距离是其整数坐标差的绝对值。

邮局将建在一些,但不一定是所有的村庄中。为了建立邮局,应选择他们建造的位置,使每个村庄与其最近的邮局之间的距离总和最小。

你要编写一个程序,已知村庄的位置和邮局的数量,计算每个村庄和最近的邮局之间所有距离的最小可能的总和。

阅读全文 »

题目链接:P5785 [SDOI2012] 任务安排 - 洛谷

本题是经典 DP 斜率优化题型。

题目描述

机器上有 $n$ 个需要处理的任务,它们构成了一个序列。这些任务被标号为 $1$ 到 $n$,因此序列的排列为 $1 , 2 , 3 \cdots n$。这 $n$ 个任务被分成若干批,每批包含相邻的若干任务。从时刻 $0$ 开始,这些任务被分批加工,第 $i$ 个任务单独完成所需的时间是 $T_i$。在每批任务开始前,机器需要启动时间 $s$,而完成这批任务所需的时间是各个任务需要时间的总和。

注意,同一批任务将在同一时刻完成。每个任务的费用是它的完成时刻乘以一个费用系数 $C_i$。

阅读全文 »

题目链接:P10977 Cut the Sequence - 洛谷

本题是经典 DP 单调队列优化题型。

题目描述

给定一个长度为 $N$ 的整数序列 $\set{a_N}$,你需要将这个序列划分成若干部分,满足每一部分都是原序列的一个连续子序列,且每个部分的整数之和均不超过 $M$。你的任务是求出在所有合法的划分方式中,每一部分的最大值之和的最小值。

输入格式

阅读全文 »

题目链接:P10978 Fence - 洛谷

本题是经典 DP 单调队列优化题型。

题目描述

一组由 $k$($1 \leq k \leq 100$) 名工人组成的团队需要粉刷一堵包含 $N$ 个木板的围栏,这些木板从左到右编号为 $1$ 到 $N$($1 \leq N \leq 16,000$)。每个工人 $i$($1 \leq i \leq k$)应该坐在木板 $S_i$ 前,他只能粉刷一个连续的区间(这意味着区间内的木板应该是连续的)。这个区间必须包含木板 $S_i$。此外,每个工人粉刷的木板数量不能超过 $L_i$ 个,并且每粉刷一个木板他会得到 $P_i$ 美元($1 \leq P_i \leq 10,000$)。每个木板最多只能由一个工人粉刷。所有的 $S_i$ 都是不同的。

作为团队的领导者,你需要为每个工人确定他们应该粉刷的区间,并且确保总收入最大化。总收入代表工人个人收入的总和。

阅读全文 »

题目链接:P3195 [HNOI2008] 玩具装箱 - 洛谷

本题是经典 DP 斜率优化题型。

题目描述

P 教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京。他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中。

P 教授有编号为 $1 \cdots n$ 的 $n$ 件玩具,第 $i$ 件玩具经过压缩后的一维长度为 $C_i$。

阅读全文 »

摘要

本文整理了 2025Spring 李言辉老师的《高级算法》课程复习题。

部分内容来自《算法导论》,推荐作为复习参考。

算法复杂度

  • 最坏复杂度:算法在任何输入实例上运行时间的最坏情况,记为 $T_{\text{worst}}(n)$。
  • 举例:快速排序最坏情况 $O(n^2)$(当数组已有序且主元选择不当)。
  • 平均复杂度:算法在所有可能输入实例上运行时间的期望,记为 $T_{\text{avg}}(n)$。
  • 举例:快速排序平均情况 $O(n \log n)$。
  • 最优复杂度:算法在“最优”输入实例上的最低运行时间(较少使用)。
  • 举例:冒泡排序在已有序数组上为 $O(n)$。
阅读全文 »

摘要

领域驱动设计基础

领域驱动设计的立意是建立以领域为驱动力的过程体系,在这一核心驱动力的设计思想指导下,并没有死板僵化的构建过程来约束你。

领域驱动设计的价值

  1. 运用分而治之思想,通过子领域与限界上下文对领域的划分降低业务复杂度
  2. 通过领域建模与统一语言,为核电行业提炼由领域模型构成的企业资产,通过复用降低技术复杂度
  3. 遵循领域驱动设计统一过程,打造标准而固化的软件构建过程,降低工程复杂度
阅读全文 »