【Luogu1912】【NOI2009】诗人小G(动态规划)
【Luogu1912】【NOI2009】诗人小G(动态规划)
题面
题解
原来\(NOI\)这么多神仙题。。。
考虑一个极其明显的\(dp\)
设\(f[i]\)表示前\(i\)个句子产生的最小代价
转移也很显然,就懒得写了。
仔细思考一下,转移具有单调性。
但是我们用单调队列似乎无法直接维护。
继续思考一下,我们的转移结果一定是从前面一个位置转移过来的
并且一定是一段连续的位置都由那个位置转移过来。
同时,如果\(i\)从\(j\)转移过来,\(i+1\)从\(k\)转移过来,其中\(j<k\)
那么,一定不存在\(x>i\),使得\(x\)从\(j\)转移。
因此决策也具有单调性。
所以利用一个单调队列来维护一下决策的单调性。
维护一下当前点影响的范围。
每次插入新点的时候,这个点影响的范围一定是一个位置\(x\)到\(n\)
所以二分一下这个位置就好了
时间复杂度\(O(Tnlognlogp)\),复杂度来自于二分+快速幂
又一次成为了cin/cout选手
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
#define ll long long
#define MAX 111111
#define double long double
struct Node{int j,l,r;}Q[MAX];
int a[MAX],n,L,P,h,t,g[MAX],S[MAX],top;
string ch[MAX];
double f[MAX];
ll s[MAX];
double fpow(double a,int b)
{
double s=1;
while(b){if(b&1)s*=a;a*=a;b>>=1;}
return s;
}
double Calc(int i,int j){return f[j]+fpow(fabs(s[i]-s[j]-1-L),P);}
int main()
{
ios::sync_with_stdio(false);
int T;cin>>T;
while(T--)
{
cin>>n>>L>>P;
for(int i=1;i<=n;++i){cin>>ch[i];a[i]=ch[i].length();}
for(int i=1;i<=n;++i)s[i]=s[i-1]+a[i]+1;
memset(Q,0,sizeof(Q));
Q[h=t=1]=(Node){0,1,n};
for(int i=1;i<=n;++i)
{
while(h<t&&Q[h].r<i)++h;
int j=Q[h].j;Q[h].l++;
f[i]=Calc(i,j);g[i]=j;
while(h<t&&Calc(Q[t].l,Q[t].j)>=Calc(Q[t].l,i))--t;
int l=Q[t].l,r=Q[t].r,ret=Q[t].r+1;
while(l<=r)
{
int mid=(l+r)>>1;
if(Calc(mid,i)<=Calc(mid,Q[t].j))ret=mid,r=mid-1;
else l=mid+1;
}
if(ret!=Q[t].l)Q[t].r=ret-1;else --t;
if(ret<=n)Q[++t]=(Node){i,ret,n};
}
if(f[n]>1e18)cout<<"Too hard to arrange"<<endl;
else
{
cout<<(ll)f[n]<<endl;
top=0;
for(int i=n;i;i=g[i])S[++top]=i;S[top+1]=0;
for(int i=top;i;--i)
for(int j=S[i+1]+1;j<=S[i];++j)
{
cout<<ch[j];
if(j!=S[i])cout<<' ';
else cout<<endl;
}
}
cout<<"--------------------"<<endl;
}
return 0;
}
【Luogu1912】【NOI2009】诗人小G(动态规划)的更多相关文章
- bzoj1563: [NOI2009]诗人小G 决策单调性(1D1D)
目录 题目链接 题解 代码 题目链接 bzoj1563: [NOI2009]诗人小G 题解 \(n^2\) 的dp长这样 \(f_i = min(f_j + (sum_i - sum_j - 1 - ...
- 1563: [NOI2009]诗人小G
1563: [NOI2009]诗人小G https://lydsy.com/JudgeOnline/problem.php?id=1563 分析: 直接转移f[i]=f[j]+cost(i,j),co ...
- [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\) ,每一行的不协调度等于该行的实际长度与行标准长度差的绝对 ...
- 不失一般性和快捷性地判定决策单调(洛谷P1912 [NOI2009]诗人小G)(动态规划,决策单调性,单调队列)
洛谷题目传送门 闲话 看完洛谷larryzhong巨佬的题解,蒟蒻一脸懵逼 如果哪年NOI(放心我这样的蒟蒻是去不了的)又来个决策单调性优化DP,那蒟蒻是不是会看都看不出来直接爆\(0\)?! 还是要 ...
- BZOJ1563 NOI2009诗人小G(动态规划+决策单调性)
设f[i]为前i行的最小不协调度,转移枚举这一行从哪开始,显然有f[i]=min{f[j]+abs(s[i]-s[j]+i-j-1-m)p}.大胆猜想有决策单调性就好了.证明看起来很麻烦,从略.注意需 ...
- NOI2009 诗人小G
Sol 决策单调性+二分 传说中的四边形不等式...其实做了这道题还是不会... 证明简直吃屎//// 贴个传送门这里有部分分做法还有决策单调性的证明 byvoid ISA tell me that ...
- [bzoj1563][NOI2009]诗人小G(决策单调性优化)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1563 分析: 首先可得朴素的方程:f[i]=min{f[j]+|s[j]-j-s[i] ...
随机推荐
- char和String 在jsp java代码中与jstl代码中的区别
在 jsp java代码中 '0' ,这种代表char 在jstl中 '0' 会被解释为 String 所以也可以用 .equals 方法
- Python接口测试实战2 - 使用Python发送请求
如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...
- Spark配置参数的三种方式
1.Spark 属性Spark应用程序的运行是通过外部参数来控制的,参数的设置正确与否,好与坏会直接影响应用程序的性能,也就影响我们整个集群的性能.参数控制有以下方式:(1)直接设置在SparkCon ...
- 宿主机ssh免密登录docker容器
一.检查系统内核 二.安装docker 1.yum install docker -y 2.docker version #查看docker版本 3.syste ...
- win2003系统网络安装——基于linux+pxe+dhcp+tftp+samba+ris
原文发表于:2010-09-16 转载至cu于:2012-07-21 一.原理简介 PXE(preboot execute environment)工作于Client/Server的网络模式,支持工作 ...
- 基于preteus的1602液晶显示器的学习(LM016L)
(证明学过,以示纪念) 所谓1602就是每行可以显示16个字符,可以显示两行.1602液晶在工业中使用比较广泛,其基本都采用的是HD44780控制器,或者兼容该指令集,因此基于HD44780写的控制程 ...
- 简析Monte Carlo与TD算法的相关问题
Monte Carlo算法是否能够做到一步更新,即在线学习? 答案显然是不能,如果可以的话,TD算法还有何存在的意义?MC算法必须要等到episode结束后才可以进行值估计的主要原因在于对Return ...
- Hybrid APP基础篇(三)->Hybrid APP之Native和H5页面交互原理
本文已经不维护,新地址: http://www.cnblogs.com/dailc/p/8097598.html 说明 Hybrid模式原生和H5交互原理 目录 前言 参考来源 前置技术要求 楔子 A ...
- Lucky Conversion(找规律)
Description Petya loves lucky numbers very much. Everybody knows that lucky numbers are positive int ...
- Scrum立会报告+燃尽图(十月二十六日总第十七次)
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2246 项目地址:https://git.coding.net/zhang ...