[luoguP3572] [POI2014]PTA-Little Bird(DP + 单调队列)


传送门

DP方程

f[i] = f[j] + (a[j] <= a[i])  ( i k < j < i )

要使 f[i] 最小,需要等号后面的值最小,可以用单调队列来维护。

至于如何维护,具体看代码。

——代码

1 #include <cstdio> 2 3 const int MAXN = 1000005; 4 int n, k, Q, h, t; 5 int a[MAXN], q[MAXN], f[MAXN]; 6 7 inline bool cmp(int x, int y) 8 11 12 int main() 13 29 printf("%d\n", f[n]); 30 } 31 return 0; 32 }
View Code

总结

这个题告诉我们,单调队列的单调性不仅仅只是个 < 或 > ,单调性是要满足最优解在一定在最前面。



上一篇:[Tyvj1939] 玉蟾宫(单调栈)

下一篇:[luoguP1439] 排列LCS问题(DP + 树状数组)


DP 单调队列
Copyright © 2002-2019 k262电脑网 www.k262.cn 皖ICP备2020016292号
温馨提示:部分文章图片数据来源与网络,仅供参考!版权归原作者所有,如有侵权请联系删除!QQ:251442993 热门搜索 网站地图