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);
//headconst int N = 1e5 + 5;
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 = 1;for (int i = 1; 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-1-l));
}
inline int srch(int l, int r, int i, int j) {int m = l+r >> 1;while(l < r) {if(cal(i, m) <= cal(j, m)) r = m;else l = m+1;m = l+r >> 1;}return m;
}
int main() {fio;cin >> T;while(T--) {cin >> n >> l >> p;for (int i = 1; i <= n; ++i) cin >> s[i];for (int i = 1; i <= n; ++i) sum[i] = sum[i-1] + s[i].size();while(!q.empty()) q.pop_back();q.push_back({1, n, 0});dp[0] = 0;for (int i = 1; i <= n; ++i) {if(q.front().r == i-1) q.pop_front();else q.front().l = i;pre[i] = q.front().j;dp[i] = cal(q.front().j, i);int pos = -1;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-1;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(0)<< dp[n] << "\n";int now = n;while(now) {vc.pb(now);now = pre[now];}vc.pb(0);reverse(vc.begin(), vc.end());for (int i = 1; i < vc.size(); ++i) {for(int j = vc[i-1]+1; j <= vc[i]; ++j) {cout << s[j];if(j != vc[i]) cout << " ";else cout << "\n";}}vc.clear();}cout << "--------------------\n";}return 0;
}

转载于:https://www.cnblogs.com/widsom/p/10949454.html

P1912 [NOI2009]诗人小G相关推荐

  1. 决策单调性Ⅰ:四边形不等式(bzoj 1563: [NOI2009]诗人小G)

    题目描述: 给出n个数字和常数L,你可以任意合并相邻的两个数字a[x]和a[x+1],并得出一个新的数a[x]+a[x+1]+1,一通合并后得到一个有若干个数的序列,这个序列的不协调值为∑|(a[i] ...

  2. NOI2009 诗人小G

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

  3. BZOJ1563:[NOI2009]诗人小G(决策单调性DP)

    Description Input Output 对于每组数据,若最小的不协调度不超过1018,则第一行一个数表示不协调度若最小的不协调度超过1018,则输出"Too hard to arr ...

  4. 洛谷P1912:诗人小G(二分栈、决策单调性)

    二分栈,就是通过二分维护的栈 (逃) 解析 本题的决策单调性可以说是显然 但是本题是同维度(其实只有一维)自左向右转移,分治的写法是不能奏效的 所以我们使用决策点调性的另一种实现方法:二分栈 具体来说 ...

  5. [BZOJ1563][NOI2009]诗人小G[决策单调性优化]

    int T, n, m, l, p, pre[MAXN], q[MAXN], h, t, b[MAXN];//b[i]表示决策点是i的最后一个位置 llf dp[MAXN]; char s1[35]; ...

  6. 【NOI 2009】诗人小G

    [NOI 2009]诗人小G Problem Description 小 \(G\) 是一个出色的诗人,经常作诗自娱自乐.但是,他一直被一件事情所困扰,那就是诗的排版问题. 一首诗包含了若干个句子,对 ...

  7. 一个诗人的一生——诗人小G的人生

    看到群里有人说周末作文是以一个诗人的一生为题写作文-于是就突发脑洞写了这么个东西. 哇发出来好羞耻啊(x 诗与人生 某一天,在某一个地方,小G诞生了. 小G原本是有自己的名字的,但是在某一天之后,他就 ...

  8. 【NOI2009】诗人小G【决策单调性dp】

    传送门 设句子加上空格长度前缀和为sss 转移方程为 fi=min⁡1≤j<i{fj+∣si−sj−L−1∣P}f_i=\min_{1\leq j<i}\{f_j+|s_i-s_j-L-1 ...

  9. 【BZOJ1563】【NOI2009】—诗人小G(决策二分栈优化dp)

    传送门 O(n2)dpO(n^2)dpO(n2)dp应该都会吧-- f[i]=min(f[j]+(sum[i]−sum[j]−L)pf[i]=min(f[j]+(sum[i]-sum[j]-L)^pf ...

最新文章

  1. 改变按钮在iPhone下的默认风格
  2. 人工智能,人脸识别门禁下的校园考勤
  3. 粒子文字特效css,CSS3 粒子效果
  4. react fiber_让我们爱上React Fiber
  5. strip and linux lib compile
  6. C语言中预定义宏的应用
  7. 华为开发者大会鸿蒙2.0系统,鸿蒙2.0来了!华为开发者大会HDC 2020宣布
  8. python numpy loadtxt
  9. mooc c语言第三周作业,2017moocC语言第七周答案
  10. 【TSP】基于matlab hopfield神经网络求解旅行商问题【含Matlab源码 408期】
  11. 拼多多|后端开发工程师|一面| 远程牛客面试 | 凉经 (2021/08/14)
  12. 19年的两篇多标签文本分类 + 一篇层级多标签文本分类论文分享
  13. 软件设计·体系结构设计(Architectual Design)
  14. 用WPE+CCproxy+自动代理截取安卓游戏封包
  15. Java 盾神与砝码称重
  16. 消除设计教室中的白人至上主义我与设计大师cheryl d miller的对话
  17. STM32第二十一课(USB SLAVE, HAL)
  18. 屡不悔改,这60款APP被强制下架!
  19. 帝国CMS系统提示登录超时解决办法
  20. 【U8+】U8+自动备份不成功BackupDB日志中显示“数据源.未找到”

热门文章

  1. 181个NLP教程合集,Colab一键直达,无需环境配置,此外还有481个文本数据集
  2. MIT“人造肌肉”登上Science封面,能提起自重650倍的物体,伸缩10000次都不坏
  3. Jmeter也能IP欺骗!
  4. linux中注册系统服务—service命令的原理通俗
  5. hibernate逆向工程生成的实体映射需要修改
  6. 串结构练习——字符串匹配
  7. 雷军:小米二为何不用1300万像素相机_TechWeb
  8. 一起谈.NET技术,ASP.NET MVC3 Service Location
  9. KOFLive Beta 下载情况及用户反馈
  10. c#运行shell命令