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

一看题我是不会做的。。好神。。

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

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

    这样我们可以得到一个DP方程,f[i]为前i块土地最小代价,有,时间复杂度On^2)。

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

    千万要开long long,比较斜率的时候的乘法不是开玩笑的。。

斜率优化戳这里

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值