题面

今天考试考了,于是开始糊学决策单调性DP

这是一个完全不会优化DP的人

决策单调性DP的一种优化方法是用单调队列优化

存下{左端点l,右端点r,最优决策点p}的三元组,按照单调队列的通常操作来说:

(0.初始化,将整个序列丢进去)

1.弹队头:弹掉所有不合法的三元组(r<i的)

2.求答案,同时更新队头的左端点

3.弹队尾:

①如果队尾的决策点不如i优,说明队尾这整个三元组当前的决策点太靠前了,直接弹掉

②当弹不掉时,根据决策单调性,队尾这个三元组后面的一部分决策点是i,前面的不是,二分出这个位置来修改。当然如果你发现事实上决策点在l就可以直接把整个都弹了=。=

4.入队(没啥可说的)

 #include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define lli long long
#define double long double
using namespace std;
const int N=;
const lli inf=1e18;
struct a
{
int l,r,p;
}que[N];
int T,n,m,k,f,b,top,pre[N],stk[N];
lli len[N]; double dp[N]; char str[N][];
double Qpow(double x,int k)
{
if(k==) return x;
double tmp=Qpow(x,k/);
return k%?tmp*tmp*x:tmp*tmp;
}
double Calc(int a,int b)
{
return dp[b]+Qpow(fabs(len[a]-len[b]-m-),k);
}
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d",&n,&m,&k);
for(int i=;i<=n;i++)
{
scanf("%s",str[i]+);
len[i]=len[i-]+strlen(str[i]+)+;
}
que[f=b=]=(a){,n,};
for(int i=;i<=n;i++)
{
while(f<b&&que[f].r<i) f++;
int pt=que[f].p; que[f].l++;
dp[i]=Calc(i,pt),pre[i]=pt;
while(f<b&&Calc(que[b].l,que[b].p)>=Calc(que[b].l,i)) b--;
int lp=que[b].l,rp=que[b].r,ps=rp+;
while(lp<=rp)
{
int mid=(lp+rp)/;
if(Calc(mid,i)<=Calc(mid,que[b].p)) rp=mid-,ps=mid;
else lp=mid+;
}
(ps==que[b].l)?b--:que[b].r=ps-;
if(ps<=n) que[++b]=(a){ps,n,i};
}
if(dp[n]>inf) puts("Too hard to arrange");
else
{
printf("%lld\n",(lli)dp[n]),top=;
for(int i=n;i;i=pre[i]) stk[++top]=i; stk[++top]=;
for(int i=top;i;i--)
for(int j=stk[i+]+;j<=stk[i];j++)
{
printf("%s",str[j]+);
j==stk[i]?puts(""):putchar(' ');
}
}
puts("--------------------");
}
return ;
}

解题:NOI 2009 诗人小G的更多相关文章

  1. [BZOJ 1563] [NOI 2009] 诗人小G(决策单调性)

    [BZOJ 1563] [NOI 2009] 诗人小G(决策单调性) 题面 一首诗包含了若干个句子,对于一些连续的短句,可以将它们用空格隔开并放在一行中,注意一行中可以放的句子数目是没有限制的.小 G ...

  2. NOI 2009 诗人小G

    题目描述 Description 小G是一个出色的诗人,经常作诗自娱自乐.但是,他一直被一件事情所困扰,那就是诗的排版问题. 一首诗包含了若干个句子,对于一些连续的短句,可以将它们用空格隔开并放在一行 ...

  3. NOI 2009A 诗人小G

    NOI 2009A 诗人小G 诗人小G [问题描述] 小G是一个出色的诗人,经常作诗自娱自乐.但是,他一直被一件事情所困扰,那就是诗的排版问题. 一首诗包含了若干个句子,对于一些连续的短句,可以将它们 ...

  4. C++之路进阶——codevs2933(诗人小G)

    2933 诗人小G 2009年NOI全国竞赛  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Master     题目描述 Description 小G是一个出色的诗人 ...

  5. 【Luogu1912】【NOI2009】诗人小G(动态规划)

    [Luogu1912][NOI2009]诗人小G(动态规划) 题面 洛谷 题解 原来\(NOI\)这么多神仙题... 考虑一个极其明显的\(dp\) 设\(f[i]\)表示前\(i\)个句子产生的最小 ...

  6. LG1912 [NOI2009]诗人小G

    题意 题目描述 小G是一个出色的诗人,经常作诗自娱自乐.但是,他一直被一件事情所困扰,那就是诗的排版问题. 一首诗包含了若干个句子,对于一些连续的短句,可以将它们用空格隔开并放在一行中,注意一行中可以 ...

  7. bzoj1563: [NOI2009]诗人小G 决策单调性(1D1D)

    目录 题目链接 题解 代码 题目链接 bzoj1563: [NOI2009]诗人小G 题解 \(n^2\) 的dp长这样 \(f_i = min(f_j + (sum_i - sum_j - 1 - ...

  8. 1563: [NOI2009]诗人小G

    1563: [NOI2009]诗人小G https://lydsy.com/JudgeOnline/problem.php?id=1563 分析: 直接转移f[i]=f[j]+cost(i,j),co ...

  9. BZOJ1563/洛谷P1912 诗人小G 【四边形不等式优化dp】

    题目链接 洛谷P1912[原题,需输出方案] BZOJ1563[无SPJ,只需输出结果] 题解 四边形不等式 什么是四边形不等式? 一个定义域在整数上的函数\(val(i,j)\),满足对\(\for ...

随机推荐

  1. WPF 嵌入winform 控件

    引入 WindowsFormsIntegration.dll   和   System.Windows.Forms.dll <Window x:Class="wgscd.Window1 ...

  2. VS新建一个模板工程

    新建一个模板工程的好处:    1.就不用每次都走一边新建向导了,新建工程一步到位. 2.可以往项目中每次都的输入的代码,如一些声明注释-- 效果图: 具体步骤: 1.自己先新建一个属于自己的工程. ...

  3. GBDT源码剖析

    如今,GBDT被广泛运用于互联网行业,他的原理与优点这里就不细说了,网上google一大把.但是,我自认为自己不是一个理论牛人,对GBDT的理论理解之后也做不到从理论举一反三得到更深入的结果.但是学习 ...

  4. Kubernetes学习之路目录

    Kubernetes基础篇 环境说明 版本说明 系统环境 Centos 7.2 Kubernetes版本 v1.11.2 Docker版本 v18.09 Kubernetes学习之路(一)之概念和架构 ...

  5. 利用Junit实现eclipse单元测试

    在eclipse中使用Junit进行单元测试 今天学会了用Junit在eclipse中进行单元测试,代码的测试工作,在整个软件开发中占有总要的地位,无论是代码开发阶段,还是代码维护阶段.另外边开发边测 ...

  6. 2014.9.11 Research Meeting Report

    Dear All: Yesterday when we read INFOCOM papers, you have seen how damage it is to have careless wri ...

  7. 萌新程序媛的首个作品,基于NoSQL的内容管理及低码开发平台

    尽管入行有一段时间了,但之前还从来没想过要开发一款完整的软件产品.这个我跟朋友开发的第一款软件,希望大家帮我们多宣传推广.首个版本肯定有很多的不足,大家也给我们多提意见,还有很多规划中的功能要在之后的 ...

  8. python图像处理 模式转化简单总结

    图像处理库PIL有九种不同模式:1,L,P,RGB,RGBA,CMYK,YCbCr,I,F 1.模式“1” 模式“1”为二值图像,非黑即白.但是它每个像素用8个bit表示,0表示黑,255表示白. 2 ...

  9. Unity 2D相机公式换算(从其他博客上抄的)

    2d camera, unit坐标,单位换算 2d游戏可以使用平行投影的camera,这种camera需要设置size (orthographicSize),size的含义为屏幕高度的一半,不过单位不 ...

  10. R语言做相关性分析

    衡量随机变量相关性的方法主要有三种:pearson相关系数,spearman相关系数,kendall相关系数: 1.       pearson相关系数,亦即皮尔逊相关系数 pearson相关系数用来 ...