URAL 1427. SMS(DP+单调队列)
我用的比较传统的办法。。。单调队列优化了一下,写的有点搓,不管怎样过了。。。两个单调队列,存两个东西,预处理一个标记数组存。。。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <map>
#include <ctime>
#include <cmath>
#include <algorithm>
using namespace std;
#define INF 1000000
char str[];
int dp[];
int pre[];
int que1[];
int que2[];
int judge(char s)
{
if(s <= 'Z'&&s >= 'A')
return ;
else if(s <= 'z'&&s >= 'a')
return ;
else if(s == ' ')
return ;
else
return ;
}
int main()
{
int n,m,i,j,len,str1,end1,str2,end2;
scanf("%d%d%*c",&n,&m);
gets(str);
len = strlen(str);
for(i = ; i < len; i ++)
{
if(judge(str[i]))
{
for(j = i; j < len; j ++)
{
if(judge(str[j]))
pre[j] = i;
else
{
i = j;
break;
}
}
if(j == len) break;
}
}
for(i = ;i <= len;i ++)
dp[i] = INF;
str1 = ;end1 = ;
str2 = ;end2 = ;
que1[] = que2[] = ;
for(i = ;i <= len;i ++)
{
dp[i] = dp[que1[str1]] + ;
if(judge(str[i-]))
{
if(str2 < end2)
dp[i] = min(dp[i],dp[que2[str2]]+);
}
else
{
str2 = end2 = ;
}
if(i == len) continue;
while(str1 < end1&&dp[i] <= dp[que1[end1-]])
end1 --;
que1[end1++] = i;
while(str1 < end1&&i - que1[str1] >= n)
str1 ++;
if(judge(str[i]))
{
while(str2 < end2&&dp[i] <= dp[que2[end2-]])
end2 --;
que2[end2++] = i;
while(str2 < end2&&que2[str2] < pre[i])
str2 ++;
while(i - que2[str2] >= m&&str2 < end2)
str2 ++;
}
}
printf("%d\n",dp[len]);
return ;
}
URAL 1427. SMS(DP+单调队列)的更多相关文章
- [poj3017] Cut the Sequence (DP + 单调队列优化 + 平衡树优化)
DP + 单调队列优化 + 平衡树 好题 Description Given an integer sequence { an } of length N, you are to cut the se ...
- DP+单调队列 codevs 1748 瑰丽华尔兹(还不是很懂具体的代码实现)
codevs 1748 瑰丽华尔兹 2005年NOI全国竞赛 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题解 题目描述 Descripti ...
- 习题:烽火传递(DP+单调队列)
烽火传递[题目描述]烽火台又称烽燧,是重要的防御设施,一般建在险要处或交通要道上.一旦有敌情发生,白天燃烧柴草,通过浓烟表达信息:夜晚燃烧干柴,以火光传递军情.在某两座城市之间有n个烽火台,每个烽火台 ...
- (noip模拟二十一)【BZOJ2500】幸福的道路-树形DP+单调队列
Description 小T与小L终于决定走在一起,他们不想浪费在一起的每一分每一秒,所以他们决定每天早上一同晨练来享受在一起的时光. 他们画出了晨练路线的草图,眼尖的小T发现可以用树来描绘这个草图. ...
- 3622 假期(DP+单调队列优化)
3622 假期 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 黄金 Gold 题目描述 Description 经过几个月辛勤的工作,FJ决定让奶牛放假.假期可以在1-N天内任意选择 ...
- bzoj2500: 幸福的道路(树形dp+单调队列)
好题.. 先找出每个节点的树上最长路 由树形DP完成 节点x,设其最长路的子节点为y 对于y的最长路,有向上和向下两种情况: down:y向子节点的最长路g[y][0] up:x的次长路的g[x][1 ...
- [USACO2004][poj2373]Dividing the Path(DP+单调队列)
http://poj.org/problem?id=2373 题意:一条直线分割成N(<=25000)块田,有一群奶牛会在其固定区域吃草,每1把雨伞可以遮住向左右延伸各A到B的区域,一只奶牛吃草 ...
- HDU 3401 Trade dp+单调队列优化
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3401 Trade Time Limit: 2000/1000 MS (Java/Others)Mem ...
- hdu4374One hundred layer (DP+单调队列)
http://acm.hdu.edu.cn/showproblem.php?pid=4374 去年多校的题 今年才做 不知道这一年都干嘛去了.. DP的思路很好想 dp[i][j] = max(dp[ ...
随机推荐
- ytu 1059: 判别该年份是否闰年(水题,宏定义)
1059: 判别该年份是否闰年 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 222 Solved: 139[Submit][Status][Web ...
- MyEclipse 关闭鼠标悬停提示
preference --> MyEclipse -->Files and Editors--> Common Editor Preference --> Hovers 把里面 ...
- Mysql常用命令详解
Mysql安装目录 数据库目录 /var/lib/mysql/ 配置文件 /usr/share/mysql(mysql.server命令及配置文件) 相关命令 /usr/bin(mysqladmin ...
- Sonar规则学习笔记
1. A catch statement should never catch throwable since it includes errors. 在catch里永远不要抛出throwable. ...
- sublime总结
自定义快捷键: preferences->key binding->user ctrl+d 删除行 ctrl+k 选中下一同名变量,alt+F3 选中全部同名变量 [ {"key ...
- 友盟消息推送UPush
第一步:把下载的SDK里面的PushSDK当做Module导入自己的项目 第二步:在自己项目的build.gradle里面一定要配置applicationId defaultConfig { appl ...
- UpdatePanel的使用方法
UpdatePanel控件也是Ajax里用得最多的控件之一,UpdatePanel控件是用来局部更新网页上的内容,网页上要局部更新的内容必须放在UpdatePanel控件里,他必须和上一次说的Scri ...
- 设置type为file的input标签选择图片类型
设置能选择各种类型的图片如:png,jpg <input id="file" name="file" type="file" acce ...
- 【JavaScript基础入门】总结目录
一.JavaScript基础 1.1JavaScript概述 1.2如何使用的JavaScript 1.3JavaScript基本语法 1.4JavaScript数据类型 1.5JavaScript运 ...
- poj1745 dp
题目链接:http://poj.org/problem?id=1745 类似的题目之前写过一个差不多的(链接:http://www.cnblogs.com/a-clown/p/5982611.html ...