注意以下坑点
查看原帖
注意以下坑点
269354
loctopus楼主2020/8/31 10:01

此题坑点太多,整理一下希望对大家有帮助。

以下来自我自己 debug 以及在讨论里看到的(部分移植自洛谷讨论)。

  1. 先做完全背包再做01背包,即先上升再下降。

      原因:小鸟不可能在同一个位置 xx 既上升又下降。

  1. 请不要在做完全背包时倒序枚举。

      原因:你做的是个完全背包,要正序(具体原因见背包九讲)。

  1. 不要在一个循环里同时做完全背包和01背包。

      原因:在上升的时候我们强制计算了一些无意义的状态,

                  可能导致一个原本无意义的状态在下降时被用来转移,导致错误。

  1. 在完全背包过程中,先假设所有位置都可到达,对于碰到管道的,也要先计算。

      即枚举的高度时不能从 l[i]+1h[i]1l[i]+1\rightarrow h[i]-1,而应该从0m0\rightarrow m

      原因:有可能出现上升一次碰到管道下部,但上升两次就落到管道间隙的情况。

                  若不假设上升一次的状态合法,上升两次状态转移时就会错误。

  1. 情况分为两种:

       · 对于有处理溢出的(如: up=min(j+a[i],m) ):

      请注意 mm 可从 (ma[i])(m1)(m-a[i])\rightarrow (m-1) 转移而来 。

      · 对于没处理溢出的:

      请把数组大小至少开成 m+max(a[i])m+\max(a[i])

2020/8/31 10:01
加载中...