解题:NOI 2009 诗人小G
今天考试考了,于是开始糊学决策单调性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的更多相关文章
- [BZOJ 1563] [NOI 2009] 诗人小G(决策单调性)
[BZOJ 1563] [NOI 2009] 诗人小G(决策单调性) 题面 一首诗包含了若干个句子,对于一些连续的短句,可以将它们用空格隔开并放在一行中,注意一行中可以放的句子数目是没有限制的.小 G ...
- NOI 2009 诗人小G
题目描述 Description 小G是一个出色的诗人,经常作诗自娱自乐.但是,他一直被一件事情所困扰,那就是诗的排版问题. 一首诗包含了若干个句子,对于一些连续的短句,可以将它们用空格隔开并放在一行 ...
- NOI 2009A 诗人小G
NOI 2009A 诗人小G 诗人小G [问题描述] 小G是一个出色的诗人,经常作诗自娱自乐.但是,他一直被一件事情所困扰,那就是诗的排版问题. 一首诗包含了若干个句子,对于一些连续的短句,可以将它们 ...
- C++之路进阶——codevs2933(诗人小G)
2933 诗人小G 2009年NOI全国竞赛 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 小G是一个出色的诗人 ...
- 【Luogu1912】【NOI2009】诗人小G(动态规划)
[Luogu1912][NOI2009]诗人小G(动态规划) 题面 洛谷 题解 原来\(NOI\)这么多神仙题... 考虑一个极其明显的\(dp\) 设\(f[i]\)表示前\(i\)个句子产生的最小 ...
- LG1912 [NOI2009]诗人小G
题意 题目描述 小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 ...
- BZOJ1563/洛谷P1912 诗人小G 【四边形不等式优化dp】
题目链接 洛谷P1912[原题,需输出方案] BZOJ1563[无SPJ,只需输出结果] 题解 四边形不等式 什么是四边形不等式? 一个定义域在整数上的函数\(val(i,j)\),满足对\(\for ...
随机推荐
- python基础2之字符串、列表、字典、集合
内容概要: 一.python2 or 3 二.字符串拼接 三.字符串 四.列表.元祖 五.字典 六.集合 七.练习 一.python2 or python3 目前大多使用python2.7,随着时间的 ...
- 20155223 Exp9 Web安全基础实践
20155223 Exp9 Web安全基础实践 基础问题回答 SQL注入攻击原理,如何防御? 攻击原理:SQL注入即是指web应用程序对用户输入数据的合法性没有判断,攻击者可以在web应用程序中事先定 ...
- 20155310 《网络对抗》Exp 8 Web基础
20155310 <网络对抗>Exp 8 Web基础 基础问题回答 (1)什么是表单 表单是一个包含表单元素的区域. 表单元素是允许用户在表单中(比如:文本域.下拉列表.单选框.复选框等等 ...
- PHP 练习(租房子)
一.题目要求 二.题目做法 1.建立数据库 2.封装类文件 <?php class DBDA { public $fuwuqi="localhost"; //服务器地址 pu ...
- 阿里云OSS不同账号之间的迁移
目录 一.需求说明 二.Ossimport概述 三.配置运行环境 1.配置jdk环境 2.部署方式 3.下载并部署ossimport 四.修改单机Job的配置文件local_job.cfg 五.执行迁 ...
- libgdx学习记录19——图片动态打包PixmapPacker
libgdx中,opengl 1.x要求图片长宽必须为2的整次幂,一般有如下解决方法 1. 将opengl 1.x改为opengl 2.0.(libgdx 1.0版本后不支持1.x,当然不存在这个问题 ...
- 微信小程序之地理位置授权 wx.getLocation
1. 授权地理位置 点击按钮,弹出授权弹窗,点击允许后,在以后的操作中可以随时获取到用户地理位置 点击拒绝后,将无法获取到地理位置,也无法再次点击弹出弹窗. <button bindtap='o ...
- NodeJS旅程 : express - nodejs MVC 中的王牌
express 正如ASP.NET MVC 在作为.net平台下最佳的 Mvc框架的地位一样,express在 node.js 环境也有着相同的重要性.在百度上 "nodejs expres ...
- How to export data from Thermo-Calc 如何从Thermo-calc导出文本数据
记录20180510 问题:如何从thermo-calc导出文本数据供origin绘图? 解决: In Thermo-Calc graphical mode, you can just add a ' ...
- Istio如何使用相同的端口访问网格外服务
1.1.背景 写这篇文章的目的是为了说明以下问题:如何使用TCP协议相同的端口访问网格外多个服务? 这是最近直播的时候有一个同学提出的,当时我没有完全明白,“访问多集群” 的意思.后来仔细思考了一下, ...