[bzoj1563][诗人小g]
思路
首先考虑\(n^2\)的暴力dp,用sum[i]表示前i句话的长度总和。f[i]表示前i句话最小的不协调度之和。转移的时候考虑枚举前面的每个点,找到转移的最优秀的那个点。
然后优化这个暴力。用一个队列存下当前个点之后的点中,哪个区间是从当前点转移更优秀(称为这个点的控制范围)。然后如果当前枚举的位置已经超过队首控制范围。那么队首就可以弹出了。加入新点时,如果队尾控制范围的最左侧也是从当前点转移更优秀,那么队尾就可以弹出了。然后二分当前点与队尾点控制范围的分界点。并且将当前点入队。
代码
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
typedef long double ll;
const int N=100000+10;
int read() {
int x=0, tmp=1;
char ch=getchar();
//wxywwwwwwwwwwwwwwwwwwww
while( (ch<'0') || (ch>'9') ){
if(ch=='-')tmp=-1; ch=getchar();}
while( (ch>='0')&&(ch<='9') ){
x=x*10+ch-'0';ch=getchar();
}//wxywwwwwwwwwwwwwwww
return (x*tmp);
}
int n;
ll P,Std;
ll f[N],sum[N];
ll qm(ll x) {//快速幂
if(x<0) x=-x;
ll ans=1;
int y=P;
for(ll now=x;y;y>>=1,now=now*now)
if(y&1) ans*=now;
return ans;
}
ll calc(int x,int y) {//计算函数
return f[y]+qm(sum[x]-sum[y]-Std-1);
}
int find(int l,int r,int x,int y) {//二分从l到r中x比y优秀的第一个位置
int ans=n;
while(l<=r) {
int mid=(l+r)>>1;
if(calc(mid,x)<calc(mid,y)) ans=mid,r=mid-1;
else l=mid+1;
}
return ans;
}
char s[35];
struct node {
int xh,l,r;
node () {
xh=l=r=0;
}
node (int x,int L,int R) {
xh=x,l=L,r=R;
}
}q[N];
int main() {
int T=read();
while(T--) {
int head=1,tail=0;
n=read();Std=read();P=read();
for(int i=1;i<=n;++i) {
scanf("%s",s);
sum[i]=sum[i-1]+strlen(s)+1;
}
q[++tail]=node(0,1,n);
for(int i=1;i<=n;++i) {
while(head<=tail&&q[head].r<i) head++;//超出队首控制范围
f[i]=calc(i,q[head].xh);
if(calc(n,i) >calc(n,q[tail].xh)) continue;//如果最后一个点都是从队尾转移优秀,那就不用入队了
while(head<=tail&&calc(q[tail].l,i)<calc(q[tail].l,q[tail].xh)) tail--;//将队尾出队
q[tail].r=find(q[tail].l,n,i,q[tail].xh)-1;//更改控制范围
q[++tail]=node(i,q[tail-1].r+1,n);.//入队
}
if(f[n]>1e18) puts("Too hard to arrange");
else
printf("%lld\n",(long long)f[n]);
puts("--------------------");
}
return 0;
}
[bzoj1563][诗人小g]的更多相关文章
- bzoj1563: [NOI2009]诗人小G 决策单调性(1D1D)
目录 题目链接 题解 代码 题目链接 bzoj1563: [NOI2009]诗人小G 题解 \(n^2\) 的dp长这样 \(f_i = min(f_j + (sum_i - sum_j - 1 - ...
- BZOJ1563/洛谷P1912 诗人小G 【四边形不等式优化dp】
题目链接 洛谷P1912[原题,需输出方案] BZOJ1563[无SPJ,只需输出结果] 题解 四边形不等式 什么是四边形不等式? 一个定义域在整数上的函数\(val(i,j)\),满足对\(\for ...
- C++之路进阶——codevs2933(诗人小G)
2933 诗人小G 2009年NOI全国竞赛 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 小G是一个出色的诗人 ...
- LG1912 [NOI2009]诗人小G
题意 题目描述 小G是一个出色的诗人,经常作诗自娱自乐.但是,他一直被一件事情所困扰,那就是诗的排版问题. 一首诗包含了若干个句子,对于一些连续的短句,可以将它们用空格隔开并放在一行中,注意一行中可以 ...
- 1563: [NOI2009]诗人小G
1563: [NOI2009]诗人小G https://lydsy.com/JudgeOnline/problem.php?id=1563 分析: 直接转移f[i]=f[j]+cost(i,j),co ...
- 【Luogu1912】【NOI2009】诗人小G(动态规划)
[Luogu1912][NOI2009]诗人小G(动态规划) 题面 洛谷 题解 原来\(NOI\)这么多神仙题... 考虑一个极其明显的\(dp\) 设\(f[i]\)表示前\(i\)个句子产生的最小 ...
- [NOI2009]诗人小G --- DP + 决策单调性
[NOI2009]诗人小G 题目描述: 小G是一个出色的诗人,经常作诗自娱自乐. 但是,他一直被一件事情所困扰,那就是诗的排版问题. 一首诗包含了若干个句子,对于一些连续的短句,可以将它们用空格隔开并 ...
- NOI 2009A 诗人小G
NOI 2009A 诗人小G 诗人小G [问题描述] 小G是一个出色的诗人,经常作诗自娱自乐.但是,他一直被一件事情所困扰,那就是诗的排版问题. 一首诗包含了若干个句子,对于一些连续的短句,可以将它们 ...
- P1912 [NOI2009]诗人小G
P1912 [NOI2009]诗人小G 思路: 平行四边形不等式优化dp 因为f(j, i) = abs(sum[i]-sum[j]+i-j-1-l)^p 满足平行四边形不等式 j < i f( ...
随机推荐
- Ionic1.x项目中的Installing npm packages问题
与npm远程源有关,可以通过cnpm来解决: 一.ionic start myApp blank --skip-npm(跳过Installing npm packages会产生的问题): 二.然后进入 ...
- 深度学习+CRF解决NER问题
参考https://github.com/shiyybua/NER 1.开发环境:python3.5+tensorflow1.5+pycharm 2.从https://github.com/shiyy ...
- 待解决ava.lang.OutOfMemoryError: PermGen space at java.lang.ClassLoader.defineClass1(Native Method)
java.lang.OutOfMemoryError: PermGen space at java.lang.ClassLoader.defineClass1(Native Method) at ja ...
- java web 开发入门 --- tomcat/servlet/jsp
在做java web 开发时,要先安装tomcat.它是一个web服务器,也叫web容器,我们把写好的jsp, html页面放到它里面,然后启动它,就可以用浏览器访问这些页面,地址栏中输入localh ...
- Nginx 阻塞与非阻塞
L:32
- linux-shell系列5-统计
#!/bin/bashshow=$(service --status-all 2>/dev/null | grep -E "is running|正在运行"|awk '{pr ...
- 轮询、长轮询、websock
引入 Web端即时通讯技术:即时通讯技术简单的说就是实现这样一种功能:服务器端可以即时地将数据的更新或变化反应到客户端,例如消息即时推送等功能都是通过这种技术实现的.但是在Web中,由于浏览器的限制, ...
- 洛谷P2055假期的宿舍
题目 此题主要是考察二分图匹配,而二分图匹配最主要的就是建图,而图一般都是要分成两个部分来分,比如该题就需要先将在学校住的人和床连在一起,因为在学校住就会与一个床.然后每两个人之间假如他们相互认识就可 ...
- 洛谷P1107[BJWC2008]雷涛的小猫题解
题目 这个题可以说是一个很基础偏中等的\(DP\)了,很像\(NOIpD1T2\)的难度,所以这个题是很好想的. 简化题意 可以先简化一下题意,这个题由于从上面向下调和从下向上爬都是一样的,所以我们就 ...
- Django+Xadmin打造在线教育系统(六)
讲师相关功能实现 拷贝并修改teacher-list.html和teacher-detail.html, 继承base模板 # 讲师列表 path('teacher_list/', TeacherLi ...