BZOJ1563:[NOI2009]诗人小G(决策单调性DP)
Description
Input
Output
Sample Input
4 9 3
brysj,
hhrhl.
yqqlm,
gsycl.
4 9 2
brysj,
hhrhl.
yqqlm,
gsycl.
1 1005 6
poet
1 1004 6
poet
Sample Output
--------------------
32
--------------------
Too hard to arrange
--------------------
1000000000000000000
--------------------
【样例说明】
前两组输入数据中每行的实际长度均为6,后两组输入数据每行的实际长度均为4。一个排版方案中每行相邻两个句子之间的空格也算在这行的长度中(可参见样例中第二组数据)。每行末尾没有空格。
HINT
总共10个测试点,数据范围满足:
测试点 T N L P
1 ≤10 ≤18 ≤100 ≤5
2 ≤10 ≤2000 ≤60000 ≤10
3 ≤10 ≤2000 ≤60000 ≤10
4 ≤5 ≤100000 ≤200 ≤10
5 ≤5 ≤100000 ≤200 ≤10
6 ≤5 ≤100000 ≤3000000 2
7 ≤5 ≤100000 ≤3000000 2
8 ≤5 ≤100000 ≤3000000 ≤10
9 ≤5 ≤100000 ≤3000000 ≤10
10 ≤5 ≤100000 ≤3000000 ≤10
所有测试点中均满足句子长度不超过30。
Solution
题解
自闭了
Code
1 #include<iostream> 2 #include<cstring> 3 #include<cstdlib> 4 #include<cstdio> 5 #include<cmath> 6 #define N (100009) 7 #define LL long double 8 #define MAX 1e18 9 using namespace std; 10 11 struct Node{int l,r,p;}q[N]; 12 int T,n,l,p; 13 LL sum[N],f[N]; 14 char s[N][35]; 15 16 LL Calc(int j,int i) 17 { 18 return f[j]+pow(abs(sum[i]-sum[j]+i-j-1-l),p); 19 } 20 21 int Find(Node t,int x) 22 { 23 int l=t.l,r=t.r,ans=t.r+1; 24 while (l<=r) 25 { 26 int mid=(l+r)>>1; 27 if (Calc(x,mid)<=Calc(t.p,mid)) 28 ans=mid,r=mid-1; 29 else l=mid+1; 30 } 31 return ans; 32 } 33 34 void DP() 35 { 36 int head=1,tail=1; 37 q[1]=(Node){0,n,0}; 38 for (int i=1; i<=n; ++i) 39 { 40 if (head<=tail && i>q[head].r) head++; 41 f[i]=Calc(q[head].p,i); 42 if (head>tail || Calc(i,n)<=Calc(q[tail].p,n)) 43 { 44 while (head<=tail && Calc(i,q[tail].l)<=Calc(q[tail].p,q[tail].l)) tail--; 45 if (head>tail) q[++tail]=(Node){i,n,i}; 46 else 47 { 48 int now=Find(q[tail],i); 49 q[tail].r=now-1; 50 q[++tail]=(Node){now,n,i}; 51 } 52 } 53 } 54 } 55 56 int main() 57 { 58 scanf("%d",&T); 59 while (T--) 60 { 61 scanf("%d%d%d",&n,&l,&p); 62 for (int i=1; i<=n; ++i) 63 scanf("%s",s[i]); 64 for (int i=1; i<=n; ++i) 65 sum[i]=sum[i-1]+strlen(s[i]); 66 DP(); 67 if (f[n]>MAX) puts("Too hard to arrange"); 68 else printf("%lld\n",(long long)f[n]); 69 puts("--------------------"); 70 } 71 }
转载于:https://www.cnblogs.com/refun/p/9754258.html
BZOJ1563:[NOI2009]诗人小G(决策单调性DP)相关推荐
- [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]; ...
- 决策单调性Ⅰ:四边形不等式(bzoj 1563: [NOI2009]诗人小G)
题目描述: 给出n个数字和常数L,你可以任意合并相邻的两个数字a[x]和a[x+1],并得出一个新的数a[x]+a[x+1]+1,一通合并后得到一个有若干个数的序列,这个序列的不协调值为∑|(a[i] ...
- P1912 [NOI2009]诗人小G
P1912 [NOI2009]诗人小G 思路: 平行四边形不等式优化dp 因为f(j, i) = abs(sum[i]-sum[j]+i-j-1-l)^p 满足平行四边形不等式 j < i f( ...
- NOI2009 诗人小G
题目 小G是一个出色的诗人,经常作诗自娱自乐.但是,他一直被一件事情所困扰,那就是诗的排版问题. 一首诗包含了若干个句子,对于一些连续的短句,可以将它们用空格隔开并放在一行中,注意一行中可以放的句子数 ...
- 【NOI 2009】诗人小G
[NOI 2009]诗人小G Problem Description 小 \(G\) 是一个出色的诗人,经常作诗自娱自乐.但是,他一直被一件事情所困扰,那就是诗的排版问题. 一首诗包含了若干个句子,对 ...
- [关于决策单调性DP]
[关于决策单调性DP] [~留个坑以后再填] 1.四边形不等式&凸完全单调性 2.决策单调性 不难发现,其实四边形不等式的充要条件就是w(x,i+1)-w(x,i)关于x单调不增. 然后处理的 ...
- 【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 ...
- 洛谷P1912:诗人小G(二分栈、决策单调性)
二分栈,就是通过二分维护的栈 (逃) 解析 本题的决策单调性可以说是显然 但是本题是同维度(其实只有一维)自左向右转移,分治的写法是不能奏效的 所以我们使用决策点调性的另一种实现方法:二分栈 具体来说 ...
- 一个诗人的一生——诗人小G的人生
看到群里有人说周末作文是以一个诗人的一生为题写作文-于是就突发脑洞写了这么个东西. 哇发出来好羞耻啊(x 诗与人生 某一天,在某一个地方,小G诞生了. 小G原本是有自己的名字的,但是在某一天之后,他就 ...
最新文章
- python opencv 投影变换 黑边
- 2020计算机语言排行 rust,RedMonk 2020 年 Q3 编程语言排行:Rust 首次进入前 20
- 亲测使用 swagger 动态修改后台默认访问地址 swagger-ui.html
- SpringBoot 操作 Redis的各种实现(以及Jedis、Redisson、Lettuce的区别比较)
- Bit-Vector框架(1) — Reaching Definition Analysis
- 关于java 操作word的几种方式
- 算法谜题1,狼羊菜过河
- 千兆光模块的类型都有哪些?
- CFileDialog 参数及返回值
- 做计算机实验报告的总结,制作网线实验报告与总结
- int64_t 在 32 位环境下其实是 long long
- DevOps入门系列--前瞻性--前瞻性思维
- 我的抗战之兄弟连-李强强
- 深度学习:利用神经网络在少量数据情况下预测房价走势
- 【C语言练习】1.1弹跳小球
- maven多模块 统一版本管理 的正确姿势 (CI Friendly Versions) - ${revision}
- svn提交忽略target目录
- 3. ZCU102 HDMI Demo工程修改【PCIE视频传输】
- 读书笔记_008 《魔鬼经济学》
- June 11th 模拟赛C T4 Cleanup Solution