题意:

在决胜局中,Abwad决定和nbc鏖战字符串,比的是谁能更快地将一个“量子态的字符串”删除。“量子态的字符串”的每个字符都有一个删除难度dif[i]。“量子态的字符串”非常顽固,只能先分割成若干个子串,然后再通过以下两种方式删除:
1、假设子串的所有字符的删除难度之和为x,消耗a*x2+b的时间可以将子串扔进回收站。
2、若子串中出现次数最多的字符出现的次数不少于l次且不多于r次,那么采用“量子态的py自动机”算法可以消耗c*x+d的时间将子串扔进回收站。
Abwad自然知道最少用多少时间就能将字符串删去,因此,他希望你求出删去每个前缀[1,i]的最少用时。
对于所有的数据,满足n≤100000,1≤a,b,c,d≤233,1≤l,r≤n,dif[i]≤50,所有字符由小写字母组成。
思路:lyy题
老年选手犯了个大错误 DP没求完就在优化决策 结果只WA了1个点
要我说应该WA光 也许是数据难造

 var dp:array[..]of int64;
s:array[..]of int64;
q1,q2,f:array[..]of longint;
l,r:array[..]of longint;
n,a,b,c,d,l0,r0,i,x,nowl,nowr,t1,w1,t2,w2,t,j,k:longint;
ch:ansistring; function cmp(x,y,z:longint):boolean;
var x1,y1,x2,y2:int64;
begin
x1:=sqr(s[x])*a-sqr(s[y])*a+dp[x]-dp[y];
y1:=s[x]-s[y];
x2:=sqr(s[y])*a-sqr(s[z])*a+dp[y]-dp[z];
y2:=s[y]-s[z];
if x1*y2>=x2*y1 then exit(true);
exit(false);
end; function clac(j,i:longint):int64;
begin
exit(dp[j]+sqr(s[i]-s[j])*a+b);
end; function min(x,y:int64):int64;
begin
if x<y then exit(x);
exit(y);
end; begin
assign(input,'string.in'); reset(input);
assign(output,'string.out'); rewrite(output);
readln(n,a,b,c,d,l0,r0);
readln(ch);
for i:= to n do f[i]:=ord(ch[i])-ord('a')+;
for i:= to n do
begin
read(x); s[i]:=s[i-]+x;
end;
t1:=; w1:=; q1[]:=; dp[]:=;
t2:=; w2:=;
nowl:=; nowr:=;
for i:= to n do
begin
while (t1<w1)and(clac(q1[t1],i)>=clac(q1[t1+],i)) do inc(t1);
dp[i]:=clac(q1[t1],i); inc(l[f[i]]); inc(r[f[i]]);
while l[f[i]]>r0 do
begin
dec(l[f[nowl]]);
inc(nowl);
while (t2<=w2)and(q2[t2]+<nowl) do inc(t2);
end;
while r[f[i]]>=l0 do
begin
if nowr> then
begin
dec(r[f[nowr]]);
if r[f[i]]<l0 then
begin
inc(r[f[nowr]]);
break;
end;
end;
while (t2<=w2)and(dp[nowr]-s[nowr]*c<=dp[q2[w2]]-s[q2[w2]]*c) do dec(w2);
inc(w2); q2[w2]:=nowr;
inc(nowr);
end;
if t2<=w2 then
begin
t:=q2[t2];
dp[i]:=min(dp[i],dp[t]+(s[i]-s[t])*c+d);
end;
while (t1<w1)and cmp(q1[w1-],q1[w1],i) do dec(w1);
inc(w1); q1[w1]:=i;
end;
for i:= to n do writeln(dp[i]);
close(input);
close(output);
end.

【后记】
在Abwad和nbc同时将最后一个子串删去时,一个带着黑色方框眼镜,方脸,穿着高腰裤的长者,乘着圣洁的祥云,飞进了YYHS的机房。
在他伟大的思想的启发下,Abwad和nbc终于放下了对名利的追逐,找到了人生的意义——吃吃吃。从此,他们过上了幸福快乐的生活……

【NOIP2017练习】鏖战字符串(斜率优化DP)的更多相关文章

  1. bzoj-4518 4518: [Sdoi2016]征途(斜率优化dp)

    题目链接: 4518: [Sdoi2016]征途 Description Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计划用m天到达T地 ...

  2. bzoj-1096 1096: [ZJOI2007]仓库建设(斜率优化dp)

    题目链接: 1096: [ZJOI2007]仓库建设 Description L公司有N个工厂,由高到底分布在一座山上.如图所示,工厂1在山顶,工厂N在山脚.由于这座山处于高原内陆地区(干燥少雨),L ...

  3. [BZOJ3156]防御准备(斜率优化DP)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3156 分析: 简单的斜率优化DP

  4. 【BZOJ-1096】仓库建设 斜率优化DP

    1096: [ZJOI2007]仓库建设 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3719  Solved: 1633[Submit][Stat ...

  5. BZOJ 1010: [HNOI2008]玩具装箱toy 斜率优化DP

    1010: [HNOI2008]玩具装箱toy Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再 ...

  6. BZOJ 3156: 防御准备 斜率优化DP

    3156: 防御准备 Description   Input 第一行为一个整数N表示战线的总长度. 第二行N个整数,第i个整数表示在位置i放置守卫塔的花费Ai. Output 共一个整数,表示最小的战 ...

  7. HDU2829 Lawrence(斜率优化dp)

    学了模板题之后上网搜下斜率优化dp的题目,然后就看到这道题,知道是斜率dp之后有思路就可以自己做不出来,要是不事先知道的话那就说不定了. 题意:给你n个数,一开始n个数相邻的数之间是被东西连着的,对于 ...

  8. HDU3507 Print Article(斜率优化dp)

    前几天做多校,知道了这世界上存在dp的优化这样的说法,了解了四边形优化dp,所以今天顺带做一道典型的斜率优化,在百度打斜率优化dp,首先弹出来的就是下面这个网址:http://www.cnblogs. ...

  9. HDU 3507 Print Article(斜率优化DP)

    题目链接 题意 : 一篇文章有n个单词,如果每行打印k个单词,那这行的花费是,问你怎么安排能够得到最小花费,输出最小花费. 思路 : 一开始想的简单了以为是背包,后来才知道是斜率优化DP,然后看了网上 ...

  10. 斜率优化dp(POJ1180 Uva1451)

    学这个斜率优化dp却找到这个真心容易出错的题目,其中要从n倒过来到1的确实没有想到,另外斜率优化dp的算法一开始看网上各种大牛博客自以为懂了,最后才发现是错了. 不过觉得看那些博客中都是用文字来描述, ...

随机推荐

  1. JMeter(十一)内存溢出解决方法

    使用jmeter进行压力测试时遇到一段时间后报内存溢出outfmenmory错误,导致jmeter卡死了,先尝试在jmeter.bat中增加了JVM_ARGS="-Xmx2048m -Xms ...

  2. AJPFX关于增强for的概述和使用(foreach)

    增强for的概述和使用(foreach)1.增强for的概述和使用(foreach)                格式:                for(数组或者Collection集合中元素 ...

  3. Caused by: javax.el.PropertyNotFoundException: Property 'product' not found on type java.lang.String

    今天在JSP利用EL表达式取值报了 "javax.el.PropertyNotFoundException”,经过debug和打印将问题定位到这段代码: HTML应该是没啥问题,看提示在ja ...

  4. 2017.5.20欢(bei)乐(ju)赛解题报告

    预计分数:100+20+50=first 实际分数:20+0+10=gg 水灾(sliker.cpp/c/pas) 1000MS  64MB 大雨应经下了几天雨,却还是没有停的样子.土豪CCY刚从外地 ...

  5. 12 DOM操作应用

    1.创建子元素oLi=document.creatElement('li') 2.将元素附给父级元素oUl.appendChild(oLi) 3.将元素插入到父级元素里的第一位子元素之前oUl.ins ...

  6. ES6学习笔记(2)----变量的解构和赋值

    参考书<ECMAScript 6入门>http://es6.ruanyifeng.com/ 变量的解构和赋值 本质上:只要模式匹配,左边的变量就能被赋予右边对应的值 原则: 解构赋值的规则 ...

  7. Android(java)学习笔记195:ContentProvider使用之添加数据到联系人(掌握)

    1.添加联系人逻辑思路 (1)首先在raw_contacts创建一个新的id (2)在data表里面添加这个id对应的数据 2.下面通过一个案例,说明一下如何添加一条数据到联系人: (1)首先我们关注 ...

  8. dom监听事件class

    layui.use(['layer', 'form'], function(){ var layer = layui.layer ,form = layui.form; var $ = layui.j ...

  9. 说说C#中list与IList中的区别(转载)

    首先IList 泛型接口是 ICollection 泛型接口的子代,并且是所有泛型列表的基接口. 但是它仅仅是所有泛型类型的接口,并没有太多方法可以方便实用,如果仅仅是作为集合数据的承载体,确实,IL ...

  10. CAD参数绘制样条线(网页版)

    在CAD设计时,需要绘制样条线,用户可以设置样条线线重及颜色等属性. 主要用到函数说明: _DMxDrawX::PathLineTo 把路径下一个点移到指定位置.详细说明如下: 参数 说明 DOUBL ...