[BZOJ] 1563: [NOI2009]诗人小G
1D/1D的方程,代价函数是一个p次函数,典型的决策单调性
用单调队列(其实算单调栈)维护决策点,优化转移
复杂度\(O(nlogn)\)
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int MAXN = 100005;
typedef long double ll;
struct Node{
int l,r,p;
Node(int _l=0,int _r=0,int _p=0){l=_l;r=_r;p=_p;}
}q[MAXN];
ll f[MAXN],s[MAXN];
int T,n,len;
ll p;
ll qpow(ll x,int y){
if(x<0)x=-x;
ll ret=1ll;
while(y){
if(y&1)ret*=x;
x*=x;
y>>=1;
}
return ret;
}
ll calc(int x,int y){return f[x]+qpow(s[y]-s[x]-len,p);}
int fnd(const Node &x,int y){
int l=x.l,r=x.r+1,p=x.p,mid,ret=l;
while(l<r){
mid=(l+r)>>1;
if(calc(y,mid)<=calc(p,mid))r=mid;
else l=mid+1;
}
return l;
}
char str[32];
void solve(){
cin>>n>>len>>p;len++;
s[0]=0;f[0]=0;
for(int i=1;i<=n;i++){
scanf("%s",str);
s[i]=s[i-1]+strlen(str)+1;
}
int h=1,t=0;
q[++t]=Node(1,n,0);
for(int i=1;i<=n;i++){
while(h<=t&&q[h].r<i)h++;
f[i]=calc(q[h].p,i);
if(calc(i,n)<=calc(q[t].p,n)){
while(h<=t&&calc(i,q[t].l)<calc(q[t].p,q[t].l))t--;
if(h>t){q[++t]=Node(i+1,n,i);continue;}
int x=fnd(q[t],i);
q[t].r=x-1;q[++t]=Node(x,n,i);
}
}
if(f[n]>1e18){puts("Too hard to arrange");return;}
printf("%.0Lf\n",f[n]);
}
int main(){
// freopen("out.out","w",stdout);
cin>>T;
while(T--)solve(),puts("--------------------");
}
[BZOJ] 1563: [NOI2009]诗人小G的更多相关文章
- 1563: [NOI2009]诗人小G
1563: [NOI2009]诗人小G https://lydsy.com/JudgeOnline/problem.php?id=1563 分析: 直接转移f[i]=f[j]+cost(i,j),co ...
- bzoj1563: [NOI2009]诗人小G 决策单调性(1D1D)
目录 题目链接 题解 代码 题目链接 bzoj1563: [NOI2009]诗人小G 题解 \(n^2\) 的dp长这样 \(f_i = min(f_j + (sum_i - sum_j - 1 - ...
- [NOI2009]诗人小G --- DP + 决策单调性
[NOI2009]诗人小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( ...
- LG1912 [NOI2009]诗人小G
题意 题目描述 小G是一个出色的诗人,经常作诗自娱自乐.但是,他一直被一件事情所困扰,那就是诗的排版问题. 一首诗包含了若干个句子,对于一些连续的短句,可以将它们用空格隔开并放在一行中,注意一行中可以 ...
- [NOI2009] 诗人小G [题解]
诗人小G 题目大意 给出 \(n\) 个长度不超过 \(30\) 的句子,要求你对其进行排版. 对于每一行,有一个规定的行标准长度 \(L\) ,每一行的不协调度等于该行的实际长度与行标准长度差的绝对 ...
- 【BZOJ 1563】 [NOI2009]诗人小G
Description Input Output 对于每组数据,若最小的不协调度不超过1018,则第一行一个数表示不协调度若最小的不协调度超过1018,则输出"Too hard to arr ...
- NOI2009 诗人小G
Sol 决策单调性+二分 传说中的四边形不等式...其实做了这道题还是不会... 证明简直吃屎//// 贴个传送门这里有部分分做法还有决策单调性的证明 byvoid ISA tell me that ...
- 不失一般性和快捷性地判定决策单调(洛谷P1912 [NOI2009]诗人小G)(动态规划,决策单调性,单调队列)
洛谷题目传送门 闲话 看完洛谷larryzhong巨佬的题解,蒟蒻一脸懵逼 如果哪年NOI(放心我这样的蒟蒻是去不了的)又来个决策单调性优化DP,那蒟蒻是不是会看都看不出来直接爆\(0\)?! 还是要 ...
随机推荐
- js 去除字符串空白符
var a=" 123456" varb=a.replace(/(^\s*)/g, "");
- A.dreamstart的催促
题目描述 有一天集训队的学弟们正在计算一堆数,但是dreamstart感觉他们算的太慢了,就让他们坐在一起想出一个快速计算的方法,但是由于他们一时想不出来,想让你帮助他们.他们说现在有一个数列,要算出 ...
- python大战机器学习——数据降维
注:因为公式敲起来太麻烦,因此本文中的公式没有呈现出来,想要知道具体的计算公式,请参考原书中内容 降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中 1.主成分分析(PCA) 将n ...
- Ubuntu 下修改Tomcat和Jetty默认的JDK和初始内存
修改/etc/default/tomcat 或者 /etc/default/jetty 文件 中的 JAVA_HOME 和 JAVA_OPTS
- SQL 索引查找
索引查找信息 在非聚集索引里,会为每条记录存储一份非聚集索引索引键的值和一份聚集索引索引键 [在没有聚集索引的表格里,是RID值指向数据页面,有聚集索引的话指向聚集索引的键(在不使用include时) ...
- cloud turbine
turbine是聚合服务器发送事件流数据的一个工具,hystrix的监控中,只能监控单个节点,实际生产中都为集群,因此可以通过 turbine来监控集群下hystrix的metrics情况,通过eur ...
- Junit-@Annotation-动态代理-类加载器
一.测试单元 概述:用于测试JAVA代码的工具类,已内置在Eclipse中; 格式: 1.在方法的上面添加@Test; 2.对被测试的方法的要求:权限- ...
- Windows中将nginx添加到服务
下载安装nginx http://nginx.org/en/download.html 下载后解压到C盘 C:\nginx-1.14.0 添加服务 需要借助"Windows Service ...
- Android自定义可拖动的悬浮按钮
在页面上随意拖动的按钮 public class MoveScaleRotateView extends RelativeLayout { private Context mContext; //默认 ...
- Jenkins系列——使用SonarQube进行代码质量检查
1.目标 之前已经写过一篇关于Jenkins和SonarQube的一篇博客<jenkins集成sonar>,本文在参考前文的基础上,做了详细的补充. 使用SonarQube进行代码质量检查 ...