Description

Input

Output

对于每组数据,若最小的不协调度不超过1018,则第一行一个数表示不协调度若最小的不协调度超过1018,则输出"Too hard to arrange"(不包含引号)。每个输出后面加"--------------------"

Sample Input

4
4 9 3
brysj,
hhrhl.
yqqlm,
gsycl.
4 9 2
brysj,
hhrhl.
yqqlm,
gsycl.
1 1005 6
poet
1 1004 6
poet

Sample Output

108
--------------------
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)相关推荐

  1. [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]; ...

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

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

  3. P1912 [NOI2009]诗人小G

    P1912 [NOI2009]诗人小G 思路: 平行四边形不等式优化dp 因为f(j, i) = abs(sum[i]-sum[j]+i-j-1-l)^p 满足平行四边形不等式 j < i f( ...

  4. NOI2009 诗人小G

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

  5. 【NOI 2009】诗人小G

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

  6. [关于决策单调性DP]

    [关于决策单调性DP] [~留个坑以后再填] 1.四边形不等式&凸完全单调性 2.决策单调性 不难发现,其实四边形不等式的充要条件就是w(x,i+1)-w(x,i)关于x单调不增. 然后处理的 ...

  7. 【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 ...

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

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

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

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

最新文章

  1. python opencv 投影变换 黑边
  2. 2020计算机语言排行 rust,RedMonk 2020 年 Q3 编程语言排行:Rust 首次进入前 20
  3. 亲测使用 swagger 动态修改后台默认访问地址 swagger-ui.html
  4. SpringBoot 操作 Redis的各种实现(以及Jedis、Redisson、Lettuce的区别比较)
  5. Bit-Vector框架(1) — Reaching Definition Analysis
  6. 关于java 操作word的几种方式
  7. 算法谜题1,狼羊菜过河
  8. 千兆光模块的类型都有哪些?
  9. CFileDialog 参数及返回值
  10. 做计算机实验报告的总结,制作网线实验报告与总结
  11. int64_t 在 32 位环境下其实是 long long
  12. DevOps入门系列--前瞻性--前瞻性思维
  13. 我的抗战之兄弟连-李强强
  14. 深度学习:利用神经网络在少量数据情况下预测房价走势
  15. 【C语言练习】1.1弹跳小球
  16. maven多模块 统一版本管理 的正确姿势 (CI Friendly Versions) - ${revision}
  17. svn提交忽略target目录
  18. 3. ZCU102 HDMI Demo工程修改【PCIE视频传输】
  19. 读书笔记_008 《魔鬼经济学》
  20. June 11th 模拟赛C T4 Cleanup Solution

热门文章

  1. Report_客制化Excel报表中的XLS标记(案例)
  2. linux下安装jdk+tomcat+eclipse+mysql
  3. APUE读书笔记-12线程控制-04同步属性
  4. 中国人炫富的第N种表现。
  5. One Day-XML:XSLT
  6. Jbuilder9 + WebLogic8.1的基本配置
  7. HDU 4256 翻译罗马数字
  8. 数据库的简单操作命令
  9. Gitlab服务器搭建
  10. Unable to locate package update