您的位置:首页 > 其它

[BZOJ1597]Usaco2008Mar 土地购买|斜率优化dp

2015-04-23 14:36 239 查看
一看题我是不会做的。。好神。。

后来发现大概不排序没法搞,那就先排个序咯。。又发现如果i的长宽都小于j的长宽,那么买j的时候可以“顺带”买掉i,所以i可以不考虑。。用x来表示长,y来表示宽,先按x升序排序,然后从头往后扫,并维护一个y递减的单调栈,将i压入栈时,如果栈顶元素的y<=i的y,那就将栈顶弹出,因为i的x一定>=栈顶的x,而i的y又大于栈顶的y,那栈顶就被i包含了,可以扔掉,注意这里是<=。。另外排序的时候第二关键字y也要升序,因为如果x相同,y大的被先压入栈了,那y小的也会被压进去,而其实y小的那个是可以扔掉的。。

然后最后留在栈里的显然是x增加,y减少的,这样最优解一定是把这个序列分成若干段的。假设i<j<k为栈中的三个元素,如果i和k以前买,j单独买的话,i和k一起买的x和y都会比j的大,所以将j并到i,k里面会更优。。

这样我们可以得到一个DP方程,f[i]为前i块土地最小代价,有

,时间复杂度O(n^2)。

考虑对其进行优化,发现状态转移方程长着一副可以斜率优化的脸,而且f和y都是单调的,那一个单调队列就可搞了。。

千万要开long long,比较斜率的时候的乘法不是开玩笑的。。
斜率优化戳这里
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: