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的更多相关文章
- 不失一般性和快捷性地判定决策单调(洛谷P1912 [NOI2009]诗人小G)(动态规划,决策单调性,单调队列)
洛谷题目传送门 闲话 看完洛谷larryzhong巨佬的题解,蒟蒻一脸懵逼 如果哪年NOI(放心我这样的蒟蒻是去不了的)又来个决策单调性优化DP,那蒟蒻是不是会看都看不出来直接爆\(0\)?! 还是要 ...
- 洛谷P1912 [NOI2009]诗人小G(决策单调性)
传送门 题解 决策单调性是个啥……导函数是个啥……这题解讲的是啥……我是个啥…… //minamoto #include<iostream> #include<cstdio> ...
- P1912 [NOI2009]诗人小G[决策单调性优化]
地址 n个数划分若干段,给定$L$,$p$,每段代价为$|sum_i-sum_j-1-L|^p$,求总代价最小. 正常的dp决策单调性优化题目.不知道为什么luogu给了个黑题难度.$f[i]$表示最 ...
- 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是一个出色的诗人,经常作诗自娱自乐. 但是,他一直被一件事情所困扰,那就是诗的排版问题. 一首诗包含了若干个句子,对于一些连续的短句,可以将它们用空格隔开并 ...
- LG1912 [NOI2009]诗人小G
题意 题目描述 小G是一个出色的诗人,经常作诗自娱自乐.但是,他一直被一件事情所困扰,那就是诗的排版问题. 一首诗包含了若干个句子,对于一些连续的短句,可以将它们用空格隔开并放在一行中,注意一行中可以 ...
- [NOI2009] 诗人小G [题解]
诗人小G 题目大意 给出 \(n\) 个长度不超过 \(30\) 的句子,要求你对其进行排版. 对于每一行,有一个规定的行标准长度 \(L\) ,每一行的不协调度等于该行的实际长度与行标准长度差的绝对 ...
- NOI2009 诗人小G
Sol 决策单调性+二分 传说中的四边形不等式...其实做了这道题还是不会... 证明简直吃屎//// 贴个传送门这里有部分分做法还有决策单调性的证明 byvoid ISA tell me that ...
随机推荐
- 退出virtual box 独占键盘和鼠标
先按住右边的Alt键,然后按一下(右边)ctrl键
- [Tensorflow] 使用 tf.keras.utils.get_file() 下载 MS-COCO 2014 数据集
import argparse import tensorflow as tf tf.enable_eager_execution() def main(args): ""&quo ...
- 搭建IIS CA DC Exchange TMG SQL (CA DC篇)
搭建IIS CA DC Exchange TMG SQL (CA DC篇) 步骤 1: 在“下一步(N) > (按下按钮)”(位于“添加角色向导”中)上用户左键单击 步骤 2: 在“Ac ...
- Centos7下 升级php5.4到7.1 yum安装
1.查看当前 PHP 版本 php -v 查看当前 PHP 相关的安装包,删除之 yum list installed | grep php yum remove php yum remove php ...
- C/C++.字符串分割
1.ZC:只测试使用了 自己改编的函数SplitStr_ZZ(...),其它的 未测试 #include <string> #include <vector> #include ...
- jquery中 $.expr使用实例介绍
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- zabbix监控mysql主从同步和延迟
https://blog.csdn.net/natmazz/article/details/90581490 https://www.cnblogs.com/01-single/p/10602610. ...
- java学习(东软睿道)2019-09-06(预课)《随堂笔记》
2019-09-06 13:19:56 1.变量:java 名称 2.服务器server 客户端client uft8 ascll 3.Java ...
- 【AtCoder】ARC064
ARC064 C - Boxes and Candies 先把每个盒子都消到x 然后从前往后推,要求第二个的上界是x-前一个 因为我们要求靠后的那个尽量小,会对后面的修改影响尽量小 #include ...
- 在springMVC框架中集成quartz作业调度器
1.首先需要导入这几个jar包,如下图: 其中log4j,quartz,slf4j-api,slf4j-log4j12我是在项目中都引用了 2.引用完jar包后,新建一个作业调度类,执行作业调度逻辑, ...