MathLabs

第4题

在一个 n×n 的小镇中,房屋编号为 (i,j),左上角为 (1,1)。时刻 0 房屋 (1,c) 起火,其中 c≤n/2。每个单位时间内,消防员保护一座尚未着火的房屋,随后火焰从时间段开始时着火的每座房屋蔓延到所有未保护的相邻房屋;已保护房屋始终受保护。最多能救下多少座房屋? 相邻指恰有一个坐标相差 1。
第 3/6 步:按距火点距离分层
ℓ(i,j)=∣i−1∣+∣j−c∣\ell(i,j)=|i-1|+|j-c|
详细分析

若房屋到 (1,c) 的曼哈顿距离为 t,称其在第 t 层。令 d(t) 为时刻 t 前已保护的第 t 层房屋数,p(t) 为时刻 t 前已保护的高于第 t 层房屋数,s(t) 为时刻 t 尚未着火的第 t 层房屋数。每个时段只保护一座,故 p(t)+d(t)≤t 且 p(t+1)+d(t+1)≤p(t)+1。