[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\)?! 还是要 ...
随机推荐
- 进击JavaScript核心 --- (1)基本数据类型
ES5之前提供了 5种基本数据类型 和 1种引用数据类型 基本数据类型:Undefined, Null, String, Number, Boolean 引用数据类型:Object ES6开始引入了一 ...
- maven 参考
系列文章,通俗易懂,可以看看 http://www.cnblogs.com/AlanLee/category/918828.html
- Jmeter 跨线程组传递参数 之两种方法
终于搞定了Jmeter跨线程组之间传递参数,这样就不用每次发送请求B之前,都需要同时发送一下登录接口(因为同一个线程组下的请求是同时发送的),只需要发送一次登录请求,请求B直接用登录请求的参数即可,直 ...
- Codeforces Round #431 (Div. 2) C
From beginning till end, this message has been waiting to be conveyed. For a given unordered multise ...
- php:一个题目,关于优先级,及$a++和$a=$a+1,
这几天常看到微博上转发的一条微博:就做了下,竟做错了,所以就试着分析了下~~ 这是微博: 这是代码: <?php $c = 3; $b = 6; if ($c = 4 || $b = 4) { ...
- 《深入理解java虚拟机》笔记(4)对象已死吗
一.垃圾回收器回收的对象 虚拟机内存区域中程序计数器.虚拟机栈.本地方法栈随线程而生,随线程而灭.这3个区域内存分配和回收都具备确定性.因此不需要过多考虑回收问题. 而Java堆和方法区不一样,这部分 ...
- h5复制粘贴板,打开APP功能
<div class="container"> <img src="../themes/mall/img/i_red_ad4.jpg"> ...
- fileReader 上传图片
function getImgSrc(target, callback) { if (window.FileReader) { var oPreviewImg = null, oFReader = n ...
- Redis key 键
1.set key value //设置.修改值 2.get key //如果key不存在,返回nil,表示空. 3.type key //返回key对应的value的数据类型 4.ren ...
- 总结一下WindowListener的用法
记录一下便于自己查看 1.WindowListener java.awt.event 接口 WindowListener public interface WindowListener extends ...