传统题
交互题
二分
以CF1104D为例,题目要求猜测整数a(a≤1e9),每次查询(x,y)可获取x%a与y%a的大小关系,限制60次查询:
- 首先通过
(1,2)、(2,4)、(4,8)…的倍增序列查询,快速定位a所在的区间(当首次出现y%a > x%a时,a必在(x,y]内); - 随后对该区间执行二分查询,最终在
O(log n)次操作内确定a的值。
CF1354G要求在n个盒子中(含k个礼物和n-k个石头,石头重于礼物且均相同),50次操作内找到编号最小的礼物。解题的关键在于通过随机化降低问题复杂度:
- 随机选取20个物品与第一个盒子比较,若存在更重的物品,则第一个盒子必为礼物(因石头重于礼物);
- 若无一更重,则第一个盒子为石头的概率达
1-2^(-20),可近似判定为石头;
此方法利用概率优势简化问题判定,将确定性问题转化为高概率可解问题,在资源受限场景中极具实用价值。
CF1672E要求通过n+30次查询,确定放置n个单词的最小面积方案(面积=宽度×行数)。解题分两阶段:
- 先用30次查询锁定关键长度
r(一行可容纳的最大有效长度,含单词及空格); - 再根据行数
k推算每行最小宽度floor(r/k),利用r与k的约束关系排除无效方案。
二分注意好左闭右开还是左开右闭,
模拟退火算法:原理、实现与应用
模拟退火(Simulated Annealing,简称SA)是一种源于物理退火过程的启发式优化算法,因其能有效跳出局部最优解、在复杂解空间中寻找全局最优解的特性,被广泛应用于组合优化、函数极值求解等领域,尤其在算法竞赛的非传统题(如提交答案题)中表现突出。
算法核心
模拟退火的灵感来自于物理中金属退火过程:将金属加热至高温,使其原子自由运动,随后缓慢降温,原子逐渐趋于稳定的低能态。算法模拟这一过程,通过控制“温度”参数平衡“探索”与“收敛”:
- 高温阶段:允许随机搜索解空间,即使新解更差也有较大概率接受,以探索更广阔的解空间,避免陷入局部最优;
- 低温阶段:逐渐降低接受差解的概率,算法逐渐收敛,聚焦于当前最优解附近的精细搜索。
核心是:对于从当前解x到新解x'的转移,若新解更优(目标函数值更优),则必然接受;若新解更差,则以概率exp(-ΔE/T)接受(其中ΔE为目标函数变差量,T为当前温度)。温度越高,接受差解的概率越大。
算法流程
模拟退火的基本步骤可概括为:
-
初始化
- 设定初始温度
T0(通常较高,如1000)、终止温度T_end(通常极低,如1e-8)、降温系数α(0.8~0.99,控制降温速度); - 随机生成初始解
x,计算其目标函数值f(x)。
- 设定初始温度
-
迭代搜索
- 当温度
T > T_end时,重复:
a. 从当前解x出发,通过随机扰动生成新解x'(如交换、平移、翻转等操作,依问题而定);
b. 计算目标函数差值Δf = f(x') - f(x)(若求最小值,Δf < 0表示新解更优);
c. 根据Metropolis准则判断是否接受x':- 若
Δf < 0(更优),则接受x',令x = x'; - 若
Δf ≥ 0(更差),则生成[0,1)随机数r,若r < exp(-Δf/T),则接受x';
d. 降低温度:T = T × α。
- 若
- 当温度
-
终止
当温度降至T_end,输出当前最优解。

浙公网安备 33010602011771号