传统题

交互题

二分

以CF1104D为例,题目要求猜测整数aa≤1e9),每次查询(x,y)可获取x%ay%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),利用rk的约束关系排除无效方案。

二分注意好左闭右开还是左开右闭,

模拟退火算法:原理、实现与应用

模拟退火(Simulated Annealing,简称SA)是一种源于物理退火过程的启发式优化算法,因其能有效跳出局部最优解、在复杂解空间中寻找全局最优解的特性,被广泛应用于组合优化、函数极值求解等领域,尤其在算法竞赛的非传统题(如提交答案题)中表现突出。

算法核心

模拟退火的灵感来自于物理中金属退火过程:将金属加热至高温,使其原子自由运动,随后缓慢降温,原子逐渐趋于稳定的低能态。算法模拟这一过程,通过控制“温度”参数平衡“探索”与“收敛”:

  • 高温阶段:允许随机搜索解空间,即使新解更差也有较大概率接受,以探索更广阔的解空间,避免陷入局部最优;
  • 低温阶段:逐渐降低接受差解的概率,算法逐渐收敛,聚焦于当前最优解附近的精细搜索。

核心是:对于从当前解x到新解x'的转移,若新解更优(目标函数值更优),则必然接受;若新解更差,则以概率exp(-ΔE/T)接受(其中ΔE为目标函数变差量,T为当前温度)。温度越高,接受差解的概率越大。

算法流程

模拟退火的基本步骤可概括为:

  1. 初始化

    • 设定初始温度T0(通常较高,如1000)、终止温度T_end(通常极低,如1e-8)、降温系数α(0.8~0.99,控制降温速度);
    • 随机生成初始解x,计算其目标函数值f(x)
  2. 迭代搜索

    • 当温度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 × α
  3. 终止
    当温度降至T_end,输出当前最优解。

posted @ 2025-08-08 22:20  ᝰꫛꫀꪝ_yqy  阅读(21)  评论(0)    收藏  举报
/**手机适配**/ @media only screen and (max-width: 767px) { header{width:100%} .banner{width: 100%;height: 100px;} .avatar{width: 80px;height: 80px;margin: 6px;} .avatar a{padding-top: 59px;width: 80px;height: 80px;background-size: 80px 78px;} .avatar a span{margin-top: 0px; padding-top: 0px; width: auto;height: auto;} .bloglist h3 {margin: 20px 0 10px 10px;} .bloglist figure {width:auto;margin-left: 4px;} .bloglist figure img {width: 90px;height: 60px;} .bloglist ul{width:64%} .dateview {width:100%;padding-left:4px;} .dateview span {margin: 0 3px;} .weixinnone,.thumbs{display: none} .right{width: 100%;margin-top: 22px} .right ul{width:64%;margin-left: 22px;} .weather{margin: 20px 50px;} .bloglinkli{display: block} footer{width:100%} }