P1912 [NOI2009]诗人小G

思路:

平行四边形不等式优化dp

因为f(j, i) = abs(sum[i]-sum[j]+i-j-1-l)^p 满足平行四边形不等式

j < i

f(j, i+1) + f(j+1, i) >= f(j, i) + f(j+1, i+1)

所以dp[i]具有决策单调性

代码:

#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize(4)
#include<bits/stdc++.h>
using namespace std;
#define y1 y11
#define fi first
#define se second
#define pi acos(-1.0)
#define LL long long
#define LD long double
//#define mp make_pair
#define pb push_back
#define ls rt<<1, l, m
#define rs rt<<1|1, m+1, r
#define ULL unsigned LL
#define pll pair<LL, LL>
#define pli pair<LL, int>
#define pii pair<int, int>
#define piii pair<int, pii>
#define pdd pair<long double, long double>
#define mem(a, b) memset(a, b, sizeof(a))
#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define fopen freopen("in.txt", "r", stdin);freopen("out.txt", "w", stout);
//head const int N = 1e5 + ;
const LL UP = 1e18;
string s[N];
int T, n, l, p, sum[N], pre[N];
LD dp[N];
vector<int> vc;
struct Node {
int l, r, j;
};
deque<Node> q;
inline LD Pow(int x) {
LD res = ;
for (int i = ; i <= p; ++i) res *= x;
return res;
}
inline LD cal(int j, int i) {
return dp[j] + Pow(abs(sum[i]-sum[j]+i-j--l));
}
inline int srch(int l, int r, int i, int j) {
int m = l+r >> ;
while(l < r) {
if(cal(i, m) <= cal(j, m)) r = m;
else l = m+;
m = l+r >> ;
}
return m;
}
int main() {
fio;
cin >> T;
while(T--) {
cin >> n >> l >> p;
for (int i = ; i <= n; ++i) cin >> s[i];
for (int i = ; i <= n; ++i) sum[i] = sum[i-] + s[i].size();
while(!q.empty()) q.pop_back();
q.push_back({, n, });
dp[] = ;
for (int i = ; i <= n; ++i) {
if(q.front().r == i-) q.pop_front();
else q.front().l = i;
pre[i] = q.front().j;
dp[i] = cal(q.front().j, i);
int pos = -;
while(!q.empty()) {
if(cal(i, q.back().l) <= cal(q.back().j, q.back().l)) {
pos = q.back().l;
q.pop_back();
}
else {
if(cal(i, q.back().r) <= cal(q.back().j, q.back().r)) {
pos = srch(q.back().l, q.back().r, i, q.back().j);
q.back().r = pos-;
q.push_back({pos, n, i});
}
else {
if(~pos) q.push_back({pos, n, i});
break;
}
}
} }
if(dp[n] > UP) cout << "Too hard to arrange\n";
else {
cout <<fixed<<setprecision()<< dp[n] << "\n";
int now = n;
while(now) {
vc.pb(now);
now = pre[now];
}
vc.pb();
reverse(vc.begin(), vc.end());
for (int i = ; i < vc.size(); ++i) {
for(int j = vc[i-]+; j <= vc[i]; ++j) {
cout << s[j];
if(j != vc[i]) cout << " ";
else cout << "\n";
}
}
vc.clear();
}
cout << "--------------------\n";
}
return ;
}

P1912 [NOI2009]诗人小G的更多相关文章

  1. 不失一般性和快捷性地判定决策单调(洛谷P1912 [NOI2009]诗人小G)(动态规划,决策单调性,单调队列)

    洛谷题目传送门 闲话 看完洛谷larryzhong巨佬的题解,蒟蒻一脸懵逼 如果哪年NOI(放心我这样的蒟蒻是去不了的)又来个决策单调性优化DP,那蒟蒻是不是会看都看不出来直接爆\(0\)?! 还是要 ...

  2. 洛谷P1912 [NOI2009]诗人小G(决策单调性)

    传送门 题解 决策单调性是个啥……导函数是个啥……这题解讲的是啥……我是个啥…… //minamoto #include<iostream> #include<cstdio> ...

  3. P1912 [NOI2009]诗人小G[决策单调性优化]

    地址 n个数划分若干段,给定$L$,$p$,每段代价为$|sum_i-sum_j-1-L|^p$,求总代价最小. 正常的dp决策单调性优化题目.不知道为什么luogu给了个黑题难度.$f[i]$表示最 ...

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

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

  5. 1563: [NOI2009]诗人小G

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

  6. [NOI2009]诗人小G --- DP + 决策单调性

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

  7. LG1912 [NOI2009]诗人小G

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

  8. [NOI2009] 诗人小G [题解]

    诗人小G 题目大意 给出 \(n\) 个长度不超过 \(30\) 的句子,要求你对其进行排版. 对于每一行,有一个规定的行标准长度 \(L\) ,每一行的不协调度等于该行的实际长度与行标准长度差的绝对 ...

  9. NOI2009 诗人小G

    Sol 决策单调性+二分 传说中的四边形不等式...其实做了这道题还是不会... 证明简直吃屎//// 贴个传送门这里有部分分做法还有决策单调性的证明 byvoid ISA tell me that ...

随机推荐

  1. Linux中tftp安装及使用笔记

    tftp命令用在本机和tftp服务器之间使用TFTP协议传输文件. TFTP是用来下载远程文件的最简单网络协议,它其于UDP协议而实现. linux服务器端tftp-server的配置 1.安装tft ...

  2. JavaSE基础(十二)--Java 对象和类

    Java 对象和类 Java作为一种面向对象语言.支持以下基本概念: 多态 继承 封装 抽象 类 对象 实例 方法 重载 本节我们重点研究对象和类的概念. 对象:对象是类的一个实例(对象不是找个女朋友 ...

  3. [Agc029C]Lexicographic constraints_进制_二分答案_贪心

    Lexicographic constraints 题目链接:https://atcoder.jp/contests/agc029/tasks/agc029_c 数据范围:略. 题解: 二分是显然的, ...

  4. Java基础语法知识你真的都会吗?

    第一阶段 JAVA基础知识 第二章 Java基础语法知识 在我们开始讲解程序之前,命名规范是我们不得不提的一个话题,虽说命名本应该是自由的,但是仍然有一定的"潜规则",通过你对命名 ...

  5. 如何获得select被选中option的value和text和......

    我想获取select选中的value,或者text,或者…… 比如这个: <select id="select"> <option value="A&q ...

  6. 【转帖】MBW内存测试

    MBW内存测试 https://www.cnblogs.com/dongdongwq/p/5431561.html 在测试前,理应了解本机所具备的特点,比如CPU频率.内存频率.内存大小,等等信息. ...

  7. jdk1.8 Maven 的安装教程

    1.下载java1.8    URL:    http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-213315 ...

  8. hdu 3500 还是搜索

    这道题目由于每走一步的时候毛毛球是可以变换的 换言之 主体不唯一 所以这里搜索的设计有变化 再就是几个回溯的过程要注意.,.  小心使得万年船 #include <iostream> #i ...

  9. 阿里云 负载均衡 HTTP转HTTPS

    一.相关文档 1.证书服务 2.简单路由-HTTP 协议变为 HTTPS 协议 二.阿里云操作界面 1.云盾证书服务管理控制台(查询CA证书服务) 2.负载均衡管理控制台 三.相关文档 1.Syman ...

  10. Nodejs:单线程为什么能支持高并发?

      1.Nodejs是一个平台,构建在chrome的V8上(js语言解释器),采用事件驱动.非阻塞模型( c++库:libuv). 参考官方: Node.js is a platform built ...