[luoguP3572] [POI2014]PTA-Little Bird(DP + 单调队列)
2024-09-30 17:49:38
DP方程
f[i] = f[j] + (a[j] <= a[i]) ( i - k < j < i )
要使 f[i] 最小,需要等号后面的值最小,可以用单调队列来维护。
至于如何维护,具体看代码。
——代码
#include <cstdio> const int MAXN = ;
int n, k, Q, h, t;
int a[MAXN], q[MAXN], f[MAXN]; inline bool cmp(int x, int y)
{
return f[x] > f[y] || (f[x] == f[y] && a[x] < a[y]);
} int main()
{
int i;
scanf("%d", &n);
for(i = ; i <= n; i++) scanf("%d", &a[i]);
scanf("%d", &Q);
while(Q--)
{
scanf("%d", &k);
f[q[] = h = t = ] = ;
for(i = ; i <= n; i++)
{
while(h <= t && q[h] < i - k) h++;
f[i] = f[q[h]] + (a[q[h]] <= a[i]);
while(h <= t && cmp(q[t], i)) t--;
q[++t] = i;
}
printf("%d\n", f[n]);
}
return ;
}
总结
这个题告诉我们,单调队列的单调性不仅仅只是个 < 或 > ,单调性是要满足最优解在一定在最前面。
最新文章
- 附录E 安装Kafka
- 【Android测试】【第十九节】Espresso——API详解
- MySQL基础原创笔记
- 图文详细解说DevExpress 2015新版亮点【附文档下载】
- python 内建函数setattr() getattr()
- web访问速度优化分析
- python学习之subprocess模块
- 【BZOJ 1038】 1038: [ZJOI2008]瞭望塔
- 【HDOJ】2279 File Search Tool
- [转]Jquery中AJAX错误信息调试参考
- AOP的实现原理——动态代理
- hdu_2825_Wireless Password(AC自动机+状压DP)
- swift UITextView内容距离边框边距设置
- Python学习(四):模块入门
- jsp篇 之 Jsp中的内置对象和范围对象
- MySql之删除操作
- php使用fputcsv进行大数据的导出
- 【Revit API】创建相机视角
- [HEOI2012]采花
- Gitlab CI-3.遇到的问题