【题解】CF1415F Cakes for Clones

一个蛋糕有两种接法:分身接 / 本体接。

考虑令 \(g_{i}\) 表示 \(i\) 用分身接,最早在什么时刻本体能到位放下分身。令 \(f_{i,j}\) 表示 \(i\) 用本体接,分身将被去用于接 \(j\),这种方案是否可行。

考虑 \(g_i\) 的转移:

  • \(i+1\) 用本体接:放完分身就跑过去,时间有多的话可以选择跑到 \(j\) 放分身等着,然后跑回来接蛋糕,更新 \(f_{i+1, j}\) 。
  • \(i+1\) 用分身接:直接更新 \(g_{i+1}\) 。

考虑 \(f_{i,j}\) 的转移:

  • \(j\not=i+1\):那么 \(i+1\) 需要用本体接,更新 \(f_{i+1,j}\) 。
  • \(j=i+1\):此时的分身已经在 \(i+1\) 了不需要管,只需要考虑:
    • \(i+2\) 用本体接:仍然考虑在后面挑一个点放分身,转移和 \(g_i\) 差不多。
    • \(i+2\) 用分身接:更新 \(g_{i+2}\),最优方案就是直接往 \(i+2\) 跑,算好 \(i+1\) 蛋糕下落的时间。

最开始的想法是假的,因为本体分身接蛋糕时,另一个所在的合法位置不一定是连续的。大概率是受了 CF1539E 的影响 ...

不过因为蛋糕的接法序列肯定是分身一段本体一段,所以就去想想,如果当前位置本体接,那么需要哪些信息(分身信息:下一个接分身的点在哪);如果当前位置分身接,那么需要哪些信息(最早到达的时间:本体能*活动多远)。记录好信息,转移方程很好列出。

代码:Submission #131024907 - Codeforces

上一篇:FFplay播放控制


下一篇:ffmpeg源码分析1-概述