[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,比较斜率的时候的乘法不是开玩笑的。。
斜率优化戳这里
后来发现大概不排序没法搞,那就先排个序咯。。又发现如果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,比较斜率的时候的乘法不是开玩笑的。。
斜率优化戳这里
相关文章推荐
- BZOJ1597土地购买——斜率优化DP (Ⅲ)
- BZOJ1597(Usaco2008 Mar)[土地购买]--斜率优化DP
- BZOJ 1597 土地购买 (DP斜率优化)
- 【bzoj1597】土地购买 斜率优化dp
- BZOJ 1597: [Usaco2008 Mar]土地购买 [斜率优化DP]
- [bzoj] 1597 土地购买 || 斜率优化dp
- bzoj 1597: [Usaco2008 Mar]土地购买(斜率优化dp 例题)
- [BZOJ 1597][USACO 2008 Mar]土地购买(DP+斜率优化)
- [bzoj1597]: [Usaco2008 Mar]土地购买(斜率优化dp)
- 【BZOJ1597】【Usaco2008 Mar】土地购买 斜率优化DP
- bzoj 1597 土地购买(斜率优化dp)
- bzoj1597: [Usaco2008 Mar]土地购买(斜率优化+Dp+单调队列)
- [BZOJ1597][Usaco2008 Mar]土地购买(斜率优化dp)
- 【BZOJ1597】【USACO 2008 Mar】土地购买(斜率优化DP)
- [斜率DP优化]BZOJ 1597: [Usaco2008 Mar]土地购买 题解
- BZOJ 1597 Usaco 2008 Mar 土地购买 斜率优化DP
- 【斜率优化dp】bzoj 1597 土地购买
- bzoj1597[Usaco2008 Mar]土地购买 斜率优化dp
- 【斜率优化DP】BZOJ1597 [Usaco2008 Mar]土地购买
- 【BZOJ1597】【Tyvj2461】土地购买,第一次的斜率优化DP