P1912 [NOI2009]诗人小G
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相关推荐
- 决策单调性Ⅰ:四边形不等式(bzoj 1563: [NOI2009]诗人小G)
题目描述: 给出n个数字和常数L,你可以任意合并相邻的两个数字a[x]和a[x+1],并得出一个新的数a[x]+a[x+1]+1,一通合并后得到一个有若干个数的序列,这个序列的不协调值为∑|(a[i] ...
- NOI2009 诗人小G
题目 小G是一个出色的诗人,经常作诗自娱自乐.但是,他一直被一件事情所困扰,那就是诗的排版问题. 一首诗包含了若干个句子,对于一些连续的短句,可以将它们用空格隔开并放在一行中,注意一行中可以放的句子数 ...
- BZOJ1563:[NOI2009]诗人小G(决策单调性DP)
Description Input Output 对于每组数据,若最小的不协调度不超过1018,则第一行一个数表示不协调度若最小的不协调度超过1018,则输出"Too hard to arr ...
- 洛谷P1912:诗人小G(二分栈、决策单调性)
二分栈,就是通过二分维护的栈 (逃) 解析 本题的决策单调性可以说是显然 但是本题是同维度(其实只有一维)自左向右转移,分治的写法是不能奏效的 所以我们使用决策点调性的另一种实现方法:二分栈 具体来说 ...
- [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]; ...
- 【NOI 2009】诗人小G
[NOI 2009]诗人小G Problem Description 小 \(G\) 是一个出色的诗人,经常作诗自娱自乐.但是,他一直被一件事情所困扰,那就是诗的排版问题. 一首诗包含了若干个句子,对 ...
- 一个诗人的一生——诗人小G的人生
看到群里有人说周末作文是以一个诗人的一生为题写作文-于是就突发脑洞写了这么个东西. 哇发出来好羞耻啊(x 诗与人生 某一天,在某一个地方,小G诞生了. 小G原本是有自己的名字的,但是在某一天之后,他就 ...
- 【NOI2009】诗人小G【决策单调性dp】
传送门 设句子加上空格长度前缀和为sss 转移方程为 fi=min1≤j<i{fj+∣si−sj−L−1∣P}f_i=\min_{1\leq j<i}\{f_j+|s_i-s_j-L-1 ...
- 【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 ...
最新文章
- 改变按钮在iPhone下的默认风格
- 人工智能,人脸识别门禁下的校园考勤
- 粒子文字特效css,CSS3 粒子效果
- react fiber_让我们爱上React Fiber
- strip and linux lib compile
- C语言中预定义宏的应用
- 华为开发者大会鸿蒙2.0系统,鸿蒙2.0来了!华为开发者大会HDC 2020宣布
- python numpy loadtxt
- mooc c语言第三周作业,2017moocC语言第七周答案
- 【TSP】基于matlab hopfield神经网络求解旅行商问题【含Matlab源码 408期】
- 拼多多|后端开发工程师|一面| 远程牛客面试 | 凉经 (2021/08/14)
- 19年的两篇多标签文本分类 + 一篇层级多标签文本分类论文分享
- 软件设计·体系结构设计(Architectual Design)
- 用WPE+CCproxy+自动代理截取安卓游戏封包
- Java 盾神与砝码称重
- 消除设计教室中的白人至上主义我与设计大师cheryl d miller的对话
- STM32第二十一课(USB SLAVE, HAL)
- 屡不悔改,这60款APP被强制下架!
- 帝国CMS系统提示登录超时解决办法
- 【U8+】U8+自动备份不成功BackupDB日志中显示“数据源.未找到”
热门文章
- 181个NLP教程合集,Colab一键直达,无需环境配置,此外还有481个文本数据集
- MIT“人造肌肉”登上Science封面,能提起自重650倍的物体,伸缩10000次都不坏
- Jmeter也能IP欺骗!
- linux中注册系统服务—service命令的原理通俗
- hibernate逆向工程生成的实体映射需要修改
- 串结构练习——字符串匹配
- 雷军:小米二为何不用1300万像素相机_TechWeb
- 一起谈.NET技术,ASP.NET MVC3 Service Location
- KOFLive Beta 下载情况及用户反馈
- c#运行shell命令