题目链接:http://acm.pku.edu.cn/JudgeOnline/problem?id=2374
题意简述:题意和pku1661几乎一样的,从最高层的某点,到最底层的0点,求最短横移路程。
解题思路:dp+线段树。这题的数据就是大了点,要不完全和pku1661的解法一样了。
对于这个问题,可以很快想到dp,并确定状态和方程,dp[i][0]和dp[i][1]分别表示从第i层的左右端点到达目的地的最短横移路程,方程显然很明显。
这里就需要找,从某个端点掉下去会落哪一层:线性扫描,O(n),再加上从底层到顶层的递推,总的时间复杂的就达到了O(n^2),这样的方法对于pku1661是可行的,但是对于现在这题就达不到可观的效率了。
于是优化,递推的那个过程ms是不能在优化什么了,于是考虑优化从某个端点落到哪一层。对于这个问题就是简单的线段树了,从底层的信息开始向线段树区间覆盖,接着统计覆盖颜色(即会落到哪一层),于是这个问题利用线段树的 插入+统计 就解决了。接着就是递推的过程了,直接dp好了。(ps:本blog一般不会再公布代码了,解题思路有了,自己就可以写代码了,有问题可以留言,24小时内给以回复解决。)