为什么不能先做0/1背包再做完全背包?

P1941 [NOIP2014 提高组] 飞扬的小鸟

@[保登心爱](/space/show?uid=27115) 先0/1,处理完后 ```cpp int k=std::min(j+up[i],m); f[k][i-1]=std::min(f[k][i-1],f[j][i-1]+1); ``` 这样把上一层的值改动掉就好了
by __世界第一弱__ @ 2018-11-04 23:23:59


用完全背包后我们可能要用当前列的一些状态去推导一个这一列行坐标高一些的状态(而用完全背包优化前是用上一列这些行的状态),那么对于一个点,可能上一行下降过来比上一行上升过来要来的步数少,但是如果这样,我们就无法用这个状态去更新这一列行坐标更高的其他状态。先完全再0/1让我们保证计算多次上升时所用到的状态都是从上一列上升过来的 (~~然而这贴18年的,题主早就AC了吧)(大雾)~~
by Cry_For_theMoon @ 2020-08-02 15:28:42


上一页 |