CF Round968 D2

  • 解决这个问题的关键思路在于如何处理最后的 0 到 x 的归置问题,就相当于序列的集合以及对应的操作是一个函数,将 0 到 m 投进去,得出的因变量加起来就是答案。而处理“如何归置”的关键,则在于从大到小的转移
  • 我们容易从序列中得到一个由哪些数可以变到哪些数的关系,不管序列能用几次,这个关系是唯一的,而且一定是从小转移到大。那么我们其实可以发现通过遍历最大的可达数 maxb 到 0 就能处理出 0 到 maxb 中所有数的最大可达值。而大于 maxb 的数显然是不参与转移的。
  • 换一种角度看,我们其实可以把 0 到 m 的数分成两种,一种是可以填补空缺,从而参与转移的,另一种则是没有对应空缺的。对于这种数,在 D1 中,由于我们可以多次使用序列,所以这种不能填补空缺的数也能到当前序列的最大可达值;但是在 D2 中,一个序列不再能多次使用,我们就需要进行一个区别的处理。笔者开始的思路是直接将其设为 maxa 的最大值,也就是不填空缺的情况下的最大值,但是这种思路不太对,因为当同一个空缺值 a 出现过多次时,这意味着无法填补空缺的数字也可以到达 dp[a] ,那么最终所有数字都能到的最大值其实是最大的空缺值和这些 dp[a] 取 max 。把这个问题想明白后,就会发现 D1 和 D2 其实也就差在这个地方。

posted on 2024-09-01 02:59  wuhu12345  阅读(14)  评论(0)    收藏  举报

导航