题目链接

我用的比较传统的办法。。。单调队列优化了一下,写的有点搓,不管怎样过了。。。两个单调队列,存两个东西,预处理一个标记数组存。。。

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <queue>
  5. #include <map>
  6. #include <ctime>
  7. #include <cmath>
  8. #include <algorithm>
  9. using namespace std;
  10. #define INF 1000000
  11. char str[];
  12. int dp[];
  13. int pre[];
  14. int que1[];
  15. int que2[];
  16. int judge(char s)
  17. {
  18. if(s <= 'Z'&&s >= 'A')
  19. return ;
  20. else if(s <= 'z'&&s >= 'a')
  21. return ;
  22. else if(s == ' ')
  23. return ;
  24. else
  25. return ;
  26. }
  27. int main()
  28. {
  29. int n,m,i,j,len,str1,end1,str2,end2;
  30. scanf("%d%d%*c",&n,&m);
  31. gets(str);
  32. len = strlen(str);
  33. for(i = ; i < len; i ++)
  34. {
  35. if(judge(str[i]))
  36. {
  37. for(j = i; j < len; j ++)
  38. {
  39. if(judge(str[j]))
  40. pre[j] = i;
  41. else
  42. {
  43. i = j;
  44. break;
  45. }
  46. }
  47. if(j == len) break;
  48. }
  49. }
  50. for(i = ;i <= len;i ++)
  51. dp[i] = INF;
  52. str1 = ;end1 = ;
  53. str2 = ;end2 = ;
  54. que1[] = que2[] = ;
  55. for(i = ;i <= len;i ++)
  56. {
  57. dp[i] = dp[que1[str1]] + ;
  58. if(judge(str[i-]))
  59. {
  60. if(str2 < end2)
  61. dp[i] = min(dp[i],dp[que2[str2]]+);
  62. }
  63. else
  64. {
  65. str2 = end2 = ;
  66. }
  67. if(i == len) continue;
  68. while(str1 < end1&&dp[i] <= dp[que1[end1-]])
  69. end1 --;
  70. que1[end1++] = i;
  71. while(str1 < end1&&i - que1[str1] >= n)
  72. str1 ++;
  73. if(judge(str[i]))
  74. {
  75. while(str2 < end2&&dp[i] <= dp[que2[end2-]])
  76. end2 --;
  77. que2[end2++] = i;
  78. while(str2 < end2&&que2[str2] < pre[i])
  79. str2 ++;
  80. while(i - que2[str2] >= m&&str2 < end2)
  81. str2 ++;
  82. }
  83. }
  84. printf("%d\n",dp[len]);
  85. return ;
  86. }

URAL 1427. SMS(DP+单调队列)的更多相关文章

  1. [poj3017] Cut the Sequence (DP + 单调队列优化 + 平衡树优化)

    DP + 单调队列优化 + 平衡树 好题 Description Given an integer sequence { an } of length N, you are to cut the se ...

  2. DP+单调队列 codevs 1748 瑰丽华尔兹(还不是很懂具体的代码实现)

    codevs 1748 瑰丽华尔兹 2005年NOI全国竞赛  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Master 题解       题目描述 Descripti ...

  3. 习题:烽火传递(DP+单调队列)

    烽火传递[题目描述]烽火台又称烽燧,是重要的防御设施,一般建在险要处或交通要道上.一旦有敌情发生,白天燃烧柴草,通过浓烟表达信息:夜晚燃烧干柴,以火光传递军情.在某两座城市之间有n个烽火台,每个烽火台 ...

  4. (noip模拟二十一)【BZOJ2500】幸福的道路-树形DP+单调队列

    Description 小T与小L终于决定走在一起,他们不想浪费在一起的每一分每一秒,所以他们决定每天早上一同晨练来享受在一起的时光. 他们画出了晨练路线的草图,眼尖的小T发现可以用树来描绘这个草图. ...

  5. 3622 假期(DP+单调队列优化)

    3622 假期 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 黄金 Gold 题目描述 Description 经过几个月辛勤的工作,FJ决定让奶牛放假.假期可以在1-N天内任意选择 ...

  6. bzoj2500: 幸福的道路(树形dp+单调队列)

    好题.. 先找出每个节点的树上最长路 由树形DP完成 节点x,设其最长路的子节点为y 对于y的最长路,有向上和向下两种情况: down:y向子节点的最长路g[y][0] up:x的次长路的g[x][1 ...

  7. [USACO2004][poj2373]Dividing the Path(DP+单调队列)

    http://poj.org/problem?id=2373 题意:一条直线分割成N(<=25000)块田,有一群奶牛会在其固定区域吃草,每1把雨伞可以遮住向左右延伸各A到B的区域,一只奶牛吃草 ...

  8. HDU 3401 Trade dp+单调队列优化

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3401 Trade Time Limit: 2000/1000 MS (Java/Others)Mem ...

  9. hdu4374One hundred layer (DP+单调队列)

    http://acm.hdu.edu.cn/showproblem.php?pid=4374 去年多校的题 今年才做 不知道这一年都干嘛去了.. DP的思路很好想 dp[i][j] = max(dp[ ...

随机推荐

  1. JSON C# Class Generator ---由json字符串生成C#实体类的工具(转)

    转载地址:http://www.cnblogs.com/finesite/archive/2011/07/31/2122984.html json作为互联网上轻量便捷的数据传输格式,越来越受到重视.但 ...

  2. Babelfish(二分查找,字符串的处理略有难度,用sscanf输入)

    Babelfish Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 28581   Accepted: 12326 题目链接: ...

  3. python多线程之semaphore(信号量)

    #!/usr/bin/env python # -*- coding: utf-8 -*- import threading import time import random semaphore = ...

  4. Installing Hadoop on Mac OSX Yosemite Tutorial Part 1.

    Installing Hadoop on Mac OSX Yosemite Tutorial Part 1. September 23, 2014 Marek 68 Comments Install ...

  5. ASP.NET多线程下使用HttpContext.Current为null解决方案 2015-01-22 15:23 350人阅读 评论(0) 收藏

    问题一:多线程下获取文件绝对路径 当我们使用HttpContext.Current.Server.MapPath(strPath)获取绝对路径时HttpContext.Current为null,解决办 ...

  6. android 入门-Service

    sdk 1.7 package com.example.hellowrold; import java.util.Random; import com.example.hellowrold.R.id; ...

  7. [Oracle] PL/SQL学习笔记

    -- 1. 使用一个变量 declare -- Local variables here v_name ); begin -- Test statements here select t.user_n ...

  8. vector的主要操作

    vector常用方法 assign() 对Vector中的元素赋值 void assign( input_iterator start, input_iterator end ); // void a ...

  9. PRD产品需求文档

    什么是PRD? PRD是Product Requirement Document的英文缩写,即产品需求文档的意思.PRD昰产品流程中的最后一步工作,是将原型中的功能.界面具象化描述,是提交给设计(UI ...

  10. 关于CDH中开发Spark

    文章发自http://www.cnblogs.com/hark0623/p/4167363.html 转发请注明 注意:基于CDH进行Spark开发时,使用高版本的apache原生包即可:不需要使用C ...