study from:

https://www.cnblogs.com/flashhu/p/9480669.html

1.前缀和

https://www.luogu.org/problemnew/show/P2513

  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <cmath>
  4. #include <cstring>
  5. #include <time.h>
  6. #include <string>
  7. #include <set>
  8. #include <map>
  9. #include <list>
  10. #include <stack>
  11. #include <queue>
  12. #include <vector>
  13. #include <bitset>
  14. #include <ext/rope>
  15. #include <algorithm>
  16. #include <iostream>
  17. using namespace std;
  18. #define ll long long
  19. #define minv 1e-6
  20. #define inf 1e9
  21. #define pi 3.1415926536
  22. #define E 2.7182818284
  23. const int mod=1e4;//
  24. const int maxn=1e3+;
  25.  
  26. int f[maxn][maxn],tot[maxn];
  27.  
  28. int main()
  29. {
  30. int n,k,i,j,l;
  31. scanf("%d%d",&n,&k);
  32. f[][]=;
  33. for (i=;i<=n;i++)
  34. {
  35. tot[]=;
  36. l=min(i*(i-)/,k);
  37. for (j=;j<=l;j++)
  38. tot[j]=(tot[j-]+f[i-][j])%mod;
  39. for (j=;j<=l;j++)
  40. f[i][j]=(tot[j]-tot[max(j-i,-)]+mod)%mod;
  41. }
  42. printf("%d",f[n][k]);
  43. return ;
  44. }

https://www.luogu.org/problemnew/show/P2511

  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <cmath>
  4. #include <cstring>
  5. #include <time.h>
  6. #include <string>
  7. #include <set>
  8. #include <map>
  9. #include <list>
  10. #include <stack>
  11. #include <queue>
  12. #include <vector>
  13. #include <bitset>
  14. #include <ext/rope>
  15. #include <algorithm>
  16. #include <iostream>
  17. using namespace std;
  18. #define ll long long
  19. #define minv 1e-6
  20. #define inf 1e9
  21. #define pi 3.1415926536
  22. #define E 2.7182818284
  23. const int mod=;//
  24. const int maxn=5e4+;
  25.  
  26. int a[maxn],t[maxn],tot[maxn],f[maxn][];
  27.  
  28. int main()
  29. {
  30. int n,c,x,y,i,j,k,l,r,m,result=;
  31. scanf("%d%d",&n,&c);
  32. c++;
  33. for (i=;i<=n;i++)
  34. scanf("%d",&a[i]);
  35. l=; r=5e7;
  36. while (l<=r)
  37. {
  38. m=(l+r)>>;
  39. j=;
  40. k=;
  41. for (i=;i<=n;i++)
  42. if (a[i]>m)
  43. break;
  44. else if (k+a[i]>m)
  45. {
  46. j++;
  47. k=a[i];
  48. }
  49. else
  50. k+=a[i];
  51. if (i==n+ && j<=c)
  52. r=m-;
  53. else
  54. l=m+;
  55. }
  56. printf("%d ",l);
  57.  
  58. t[]=;
  59. for (i=;i<=n;i++)
  60. t[i]=t[i-]+a[i];
  61.  
  62. f[][]=;
  63. x=,y=;
  64. for (j=;j<=c;j++)
  65. {
  66. tot[-]=;
  67. for (i=;i<=n;i++)
  68. tot[i]=(tot[i-]+f[i][y])%mod;
  69. //f[i][j] f[][j-1]
  70. k=;
  71. f[][x]=;
  72. for (i=;i<=n;i++)
  73. {
  74. //[k,i)
  75. while (t[i]-t[k]>l)
  76. k++;
  77. f[i][x]=(tot[i-]-tot[k-])%mod;
  78. }
  79. result=(result+f[n][x])%mod;
  80. x=x^;
  81. y=y^;
  82. }
  83. printf("%d",(result+mod)%mod);
  84. return ;
  85. }
  86. /*
  87. 5 1
  88. 3 3 4 5 3
  89.  
  90. 5 3
  91. 1 1 1 1 1
  92. */

2.单调队列优化

https://www.luogu.org/problemnew/show/P1886

  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <cmath>
  4. #include <cstring>
  5. #include <time.h>
  6. #include <string>
  7. #include <set>
  8. #include <map>
  9. #include <list>
  10. #include <stack>
  11. #include <queue>
  12. #include <vector>
  13. #include <bitset>
  14. #include <ext/rope>
  15. #include <algorithm>
  16. #include <iostream>
  17. using namespace std;
  18. #define ll long long
  19. #define minv 1e-6
  20. #define inf 1e9
  21. #define pi 3.1415926536
  22. #define E 2.7182818284
  23. const int mod=;//
  24. const int maxn=1e6+;
  25.  
  26. /**
  27. n个数字a[1]-a[n],每个大小为m的区间
  28. 最小值和最大值
  29. **/
  30.  
  31. int a[maxn],x[maxn]; ///x:记录下标
  32.  
  33. int main()
  34. {
  35. int n,m,i,head,tail;
  36. scanf("%d%d",&n,&m);
  37. for (i=;i<=n;i++)
  38. scanf("%d",&a[i]);
  39. ///min
  40. head=,tail=;
  41. ///以i作为末尾的区间
  42. for (i=;i<=n;i++)
  43. {
  44.  
  45. while (head1<=tail1 && x[head1]<=i-m)
  46. head1++;
  47. while (head1<=tail1 && a[x[tail1]]>=a[i])
  48. tail1--;
  49.  
  50. ///每个点入队列一次,最多出队列一次
  51. while (head<=tail && x[head]<=i-m) ///在区间外的数字被剔除,(i-m,i]
  52. head++;
  53. while (head<=tail && a[x[tail]]>=a[i]) ///求区间最小/大值,对于在前面的数,只有数值小/大于后面才有用,否则从右往左被剔除(符号相反,大于等于/小于等于),类似单调栈
  54. tail--;
  55. tail++;
  56. x[tail]=i;
  57. if (i>=m)
  58. printf("%d%c",a[x[head]],i==n?'\n':' ');
  59. }
  60.  
  61. ///max
  62. head=,tail=;
  63. for (i=;i<=n;i++)
  64. {
  65. while (head<=tail && x[head]<=i-m)
  66. head++;
  67. while (head<=tail && a[x[tail]]<=a[i])
  68. tail--;
  69. tail++;
  70. x[tail]=i;
  71. if (i>=m)
  72. printf("%d%c",a[x[head]],i==n?'\n':' ');
  73. }
  74. return ;
  75. }

各种蕴含算法思想的DP - 1的更多相关文章

  1. 各种蕴含算法思想的DP - 2

    study from: https://www.cnblogs.com/flashhu/p/9480669.html 3.斜率dp study from:http://www.cnblogs.com/ ...

  2. 各种蕴含算法思想的DP - 3

    内容中包含 base64string 图片造成字符过多,拒绝显示

  3. AC自动机——多模式串匹配的算法思想

    标准KMP算法用于单一模式串的匹配,即在母串中寻求一个模式串的匹配,但是现在又存在这样的一个问题,如果同时给出多个模式串,要求找到这一系列模式串在母串存在的匹配个数,我们应该如何处理呢? 基于KMP算 ...

  4. 机器学习&数据挖掘笔记(常见面试之机器学习算法思想简单梳理)

    机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 作者:tornadomeet 出处:http://www.cnblogs.com/tornadomeet 前言: 找工作时( ...

  5. [转]机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)

    机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 转自http://www.cnblogs.com/tornadomeet/p/3395593.html 前言: 找工作时(I ...

  6. JVM三种垃圾收集算法思想及发展过程

    JVM垃圾收集算法的具体实现有很多种,本文只是介绍实现这些垃圾收集算法的三种思想和发展过程.所有的垃圾收集算法的具体实现都是遵循这三种算法思想而实现的. 1.标记-清除算法 标记-清除(Mark-Sw ...

  7. 基本算法思想Java实现的详细代码

    基本算法思想Java实现的详细代码 算法是一个程序的灵魂,一个好的算法往往可以化繁为简,高效的求解问题.在程序设计中算法是独立于语言的,无论使用哪一种语言都可以使用这些算法,本文笔者将以Java语言为 ...

  8. 基本算法思想之递推算法思想(C++语言描述)

    递推算法是非常常用的算法思想,在数学计算等场合有着广泛的应用.递推算法适合有明显公式规律的场合. 递推算法基本思想 递推算法是一种理性思维莫斯的代表,根据已有的数据和关系,逐步推到而得到结果.递推算法 ...

  9. [算法模版]子序列DP

    [算法模版]子序列DP 如何求本质不同子序列个数? 朴素DP 复杂度为\(O(nq)\).其中\(q\)为字符集大小. \(dp[i]\)代表以第\(i\)个数结尾的本质不同子序列个数.注意,这里对于 ...

随机推荐

  1. 20155320 Exp9 Web安全基础

    20155320 Exp9 Web安全基础 [实验后回答问题] (1)SQL注入攻击原理,如何防御 SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗 ...

  2. Exp1 逆向与bof基础

    20155332<网络对抗>Exp1 逆向与bof基础 1.实验目的 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简 ...

  3. Elasticsearch Query DSL 整理总结(一)—— Query DSL 概要,MatchAllQuery,全文查询简述

    目录 引言 概要 Query and filter context Match All Query 全文查询 Full text queries 小结 参考文档 引言 虽然之前做过 elasticse ...

  4. 1、Docker概述与安装

    1.Docker概述 原文地址:https://docs.docker-cn.com/engine/docker-overview/#docker-engine Docker是一个开发,集装,运行应用 ...

  5. Jq_Js_Js、Jq获取浏览器和屏幕各种高度宽度

    $(document).ready(function()         {alert($(window).height()); //浏览器当前窗口可视区域高度alert($(document).he ...

  6. python3绝对路径,相对路径

    from __future__ import absolute_import的作用: 直观地看就是说”加入绝对引入这个新特性”.说到绝对引入,当然就会想到相对引入.那么什么是相对引入呢?比如说,你的包 ...

  7. 浅谈我的UI设计之路

    时光匆匆,进入UI学习已经快两个月了,这段时间过得很充实,因为有压力才有收获. 还记的刚刚学习手绘的时候,对于这个行业只有一个初步的认识,知道自己喜欢,但是真正学习的时候才发现,我要学习的东西还有很多 ...

  8. Linux内核分析——第二周学习笔记20135308

    第二周 操作系统是如何工作的 第一节 函数调用堆栈 存储程序计算机:是所有计算机基础的框架 堆栈:计算机中基础的部分,在计算机只有机器语言.汇编语言时,就有了堆栈.堆栈机制是高级语言可以运行的基础. ...

  9. Java中的基本数据据类型

    1.整数类型 类型 字节数 表示范围 byte 1 -128~127 short 2 -32768 ~ 32767 int 4 -2147483648~2147483647 long 8 -92233 ...

  10. Daily Scrum - 12/03

    Meeting Minutes   后端基本完成,结束当前Sprint, 开始下一个Sprint.进一步讨论了UI,并完成了任务分配.   Burndown     Progress   part 组 ...