BZOJ1563 NOI2009诗人小G(动态规划+决策单调性)
设f[i]为前i行的最小不协调度,转移枚举这一行从哪开始,显然有f[i]=min{f[j]+abs(s[i]-s[j]+i-j-1-m)p}。大胆猜想有决策单调性就好了。证明看起来很麻烦,从略。注意需要全程long double。
#include<bits/stdc++.h>
using namespace std;
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
#define N 100010
#define inf 1000000000000000001ll
#define ll long long
#define ld long double
int T,n,m,p,a[N],from[N],stk[N],L[N],R[N],top;
ld f[N];
char s[N][];
void print(int n)
{
if (n==) return;
print(from[n]);
for (int i=from[n]+;i<n;i++) printf("%s ",s[i]);
puts(s[n]);
}
ld ksm(ld a,int k)
{
ld s=;
for (;k;k>>=,a*=a) if (k&) s*=a;
return s;
}
ld calc(int i,int j){return f[j]+ksm(abs(a[i]-a[j]-m),p);}
int main()
{
#ifndef ONLINE_JUDGE
freopen("c.in","r",stdin);
freopen("c.out","w",stdout);
const char LL[]="%I64d\n";
#else
const char LL[]="%lld\n";
#endif
T=read();
while (T--)
{
n=read(),m=read()+,p=read();
for (int i=;i<=n;i++) scanf("%s",s[i]),a[i]=a[i-]+strlen(s[i]);
for (int i=;i<=n;i++) f[i]=inf,a[i]+=i;
stk[top=]=;L[]=,R[]=n;
for (int i=;i<=n;i++)
{
int l=,r=top;
while (l<=r)
{
int mid=l+r>>;
if (R[mid]>=i) from[i]=stk[mid],r=mid-;
else l=mid+;
}
f[i]=calc(i,from[i]);
while (L[top]>i&&calc(L[top],i)<calc(L[top],stk[top])) top--;
l=max(L[top],i+),r=R[top];int x=R[top]+;
while (l<=r)
{
int mid=l+r>>;
if (calc(mid,i)<calc(mid,stk[top])) x=mid,r=mid-;
else l=mid+;
}
R[top]=x-;if (x<=n) stk[++top]=i,L[top]=x,R[top]=n;
}
if (f[n]<inf) printf(LL,(ll)f[n]),print(n);
else puts("Too hard to arrange");
for (int i=;i<=;i++) putchar('-');if (T) printf("\n");
}
return ;
}
BZOJ1563 NOI2009诗人小G(动态规划+决策单调性)的更多相关文章
- [bzoj1563][NOI2009]诗人小G(决策单调性优化)
		题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1563 分析: 首先可得朴素的方程:f[i]=min{f[j]+|s[j]-j-s[i] ... 
- 2018.09.28 bzoj1563: [NOI2009]诗人小G(决策单调性优化dp)
		传送门 决策单调性优化dp板子题. 感觉队列的写法比栈好写. 所谓决策单调性优化就是每次状态转移的决策都是在向前单调递增的. 所以我们用一个记录三元组(l,r,id)(l,r,id)(l,r,id)的 ... 
- BZOJ1563 NOI2009 诗人小G【决策单调性优化DP】
		LINK 因为是图片题就懒得挂了 简要题意:有n个串,拼接两个串需要加一个空格,给你l和p,问你拼接后每个串的总长减l的绝对值的p次方的最小值 首先打表发现一下这题是决策单调的对于所有数据都成立就当他 ... 
- [NOI2009]诗人小G --- DP + 决策单调性
		[NOI2009]诗人小G 题目描述: 小G是一个出色的诗人,经常作诗自娱自乐. 但是,他一直被一件事情所困扰,那就是诗的排版问题. 一首诗包含了若干个句子,对于一些连续的短句,可以将它们用空格隔开并 ... 
- 洛谷P1912 [NOI2009]诗人小G(决策单调性)
		传送门 题解 决策单调性是个啥……导函数是个啥……这题解讲的是啥……我是个啥…… //minamoto #include<iostream> #include<cstdio> ... 
- 【BZOJ1563】诗人小G(决策单调性DP)
		题意:给定N,L,P,求f[N] sum[i]递增,L<=3e6,P<=10 思路:四边形不等式的证明见https://www.byvoid.com/zhs/blog/noi-2009-p ... 
- bzoj1563: [NOI2009]诗人小G 决策单调性(1D1D)
		目录 题目链接 题解 代码 题目链接 bzoj1563: [NOI2009]诗人小G 题解 \(n^2\) 的dp长这样 \(f_i = min(f_j + (sum_i - sum_j - 1 - ... 
- BZOJ1563: [NOI2009]诗人小G(决策单调性 前缀和 dp)
		题意 题目链接 Sol 很显然的一个dp方程 \(f_i = min(f_j + (sum_i - sum_j - 1 - L)^P)\) 其中\(sum_i = \sum_{j = 1}^i len ... 
- [BZOJ1563][NOI2009]诗人小G(决策单调性优化DP)
		模板题. 每个决策点都有一个作用区间,后来的决策点可能会比先前的优.于是对于每个决策点二分到它会比谁在什么时候更优,得到新的决策点集合与区间. #include<cstdio> #incl ... 
随机推荐
- Quartz的JobDetail没有触发器指向时会被删除的问题
			之前项目里使用的是老版本的Quartz,才1.6.5.发现一个问题,如果我触发器配置的时间已经过了,想去手动触发一个任务,就会报找不到这个任务的异常,通过debug可以发现,Scheduler里添加j ... 
- TravelPort官方API解读
			TravelPort Ping通使用教程 Unit1 Lesson 1: 标签(空格分隔): 完成第1单元的三个课程后,您可以使用Travelport Universal API来提出服务请求并了解响 ... 
- C#中用HttpWebRequest中发送GET/HTTP/HTTPS请求 (转载)
			这个需求来自于我最近练手的一个项目,在项目中我需要将一些自己发表的和收藏整理的网文集中到一个地方存放,如果全部采用手工操作工作量大而且繁琐,因此周公决定利用C#来实现.在很多地方都需要验证用户身份才可 ... 
- BZOJ2154/BZOJ2693/Luogu1829 Crash的数字表格/JZPFAR 莫比乌斯反演
			传送门--Luogu 传送门--BZOJ2154 BZOJ2693是权限题 其中JZPFAR是多组询问,Crash的数字表格是单组询问 先推式子(默认\(N \leq M\),所有分数下取整) \(\ ... 
- 把DataTable转换为List<T>
			前一篇有学习过<把List<T>转换为DataTable>http://www.cnblogs.com/insus/p/8043173.html 那此篇,将是学习反向,把Dat ... 
- Linux下修改/设置环境变量JAVA_HOME
			export设置只对当前的bash登录session有效.这是存在内存里面的.你可以写入文件一般的文件.之后source它.或者放到/etc/profile 等等的位置里,不同的地方效果不同. 1. ... 
- bash:express:command not found
			重新设置了node_global和node_cache目录后,总是显示command not found 找了几篇博文后,终于解决了这个问题 步骤如下: 1.新建node_global和node_ ... 
- CF1146 Forethought Future Cup Elimination Round Tutorial
			CF1146 Forethought Future Cup Elimination Round Tutorial 叮,守夜冠军卡 https://codeforces.com/blog/entry/6 ... 
- WPF制作带明细的环形图表
			效果 明细用Popup实现的,录gif时,Popup显示不出来,不知道为什么,所以静态图凑合看吧 大体思路 图表使用Arc+Popup实现 图表分为两部分,一是环形部分,一是标注的明细部分. 环形部分 ... 
- 《Linux内核分析》第五周学习总结
			<Linux内核分析>第五周学习总结 ——扒开系统调用的三层皮(下) 姓名:王玮怡 学号:20135116 1.给menu ... 
