传送门

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 ;
}

总结

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

最新文章

  1. 附录E 安装Kafka
  2. 【Android测试】【第十九节】Espresso——API详解
  3. MySQL基础原创笔记
  4. 图文详细解说DevExpress 2015新版亮点【附文档下载】
  5. python 内建函数setattr() getattr()
  6. web访问速度优化分析
  7. python学习之subprocess模块
  8. 【BZOJ 1038】 1038: [ZJOI2008]瞭望塔
  9. 【HDOJ】2279 File Search Tool
  10. [转]Jquery中AJAX错误信息调试参考
  11. AOP的实现原理——动态代理
  12. hdu_2825_Wireless Password(AC自动机+状压DP)
  13. swift UITextView内容距离边框边距设置
  14. Python学习(四):模块入门
  15. jsp篇 之 Jsp中的内置对象和范围对象
  16. MySql之删除操作
  17. php使用fputcsv进行大数据的导出
  18. 【Revit API】创建相机视角
  19. [HEOI2012]采花
  20. Gitlab CI-3.遇到的问题

热门文章

  1. rhel7安装oracle 11gR2,所需的依赖包
  2. 原创 SqlParameter 事务 批量数据插入
  3. 支付宝-API接口解析-转账到银行
  4. Spring data jpa中Query和@Query分别返回map结果集
  5. C语言基础-循环结构
  6. matlab遗传算法工具箱
  7. POI原生导入读取EXCEL
  8. LeetCode137只出现一次的数字——位运算
  9. oracle 表之间的连接
  10. Flask框架 之数据库扩展Flask-SQLAlchemy