1300 文件排版
时间限制: 1 s

空间限制: 128000 KB

题目描述 Description

写电子邮件是有趣的,但不幸的是经常写不好看,主要是因为所有的行不一样长,你的上司想要发排版精美的电子邮件,你的任务是为他编写一个电子邮件排版程序。

完成这个任务最简单的办法是在太短的行中的单词之间插入空格,但这并不是最好的方法,考虑如下例子:


This is the example you are

actually considering.

假设我们想将第二行变得和第一行一样长,靠简单地插入空格则我们将得到如下结果:


This is the example you are

actually considering.

但这太难看了,因为在第二行中有一个非常大的空白,如果将第一行的单词“are”移到下一行我们将得到较好的结果:


This is the example you

are actually considering.

当然,这必须对难看程度进行量化。因此我们必须给出单词之间的空格的难看程度,一个包含N个空格符的空白段,其难看程度值为(n-1)2,程序的目的是使难看程度的总和最小化。例如,第一个例子的难看程度是1+7*7=50,而第二个例子的难看程度仅为1+1+1+4+1+4=12。

输出时,每一行的开头和结尾处都必须是一个单词,即每行开头和结尾处不能有空白。唯一例外的是该行仅有一个单词组成的情况,对于这种情况你可将单词放在该行开头处输出,此时如果该单词比该行应有的长度短则我们指定它的最坏程度为500,当然在这种情况下,该行的实际长度即为该单词的长度。

输入描述 Input Description

输入文件第一行是一个整数N,表示该段要求达到的宽度,1<=N<=80。该段文章由一个或多个单词组成,单词由ASCII码值为33到126(包含33和126)的字符组成,单词与单词之间用空格隔开(可能超过一个)。单词长度不会超过段落要求达到的宽度。一段文字所有单词的总长度不会超过10000个字符,任何一行都不会超过100个字符,任何一个单词都在同一行内。

输出描述 Output Description

对于每个段落,找出使其难看程度最小的排版形式并输出句子:“Minimal badness is B.”,B是指按可能的最好排版形式会发生的难看程度值。注意排版后文本行数任意,多余的空格也可删除。

样例输入 Sample Input

28

This is the example you are

actually considering.

样例输出 Sample Output

Minimal badness is 12.

分析:
只有通过把空格平均化 越是平均的空格 丑陋值越小
任何一个词作为结尾的最少丑陋值是f[i]f[i]f[i]
转移方程为 f[i]=min(f[i],f[j−1]+cost(j,i));f[i] = min(f[i],f[j-1]+cost(j,i));f[i]=min(f[i],f[j−1]+cost(j,i));
cost(j,i)cost(j,i)cost(j,i)为平均化j~i号词的花费

#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<climits>using namespace std;
typedef long long ll;
const int maxn = 0x3f3f3f3f;
char a[110];
int sum[10010],n;
ll dp[10010];
int cost(int i,int j){if(!(i^j)){if(!((sum[i]-sum[j-1])^n))return 0;return 500;}int blank = n-(sum[i]-sum[j-1]);int num = i-j;//分割数量if(blank<num)return maxn;int avg = blank/num;int y = blank-avg*num;avg--;return num*1LL*(avg)*(avg)+1LL*y*(avg<<1|1);
}
int main()
{int cnt=1;scanf("%d",&n);while(~scanf("%s",a)){sum[cnt] = sum[cnt-1]+strlen(a);cnt++;}for(int i=1;i<=cnt;i++)dp[i] = maxn;for(int i=1;i<=cnt-1;i++){for(int j=1;j<=i;j++){dp[i] = min(dp[i],dp[j-1]+cost(i,j));}}printf("Minimal badness is %lld.\n",dp[cnt-1]);return 0;
}

CodeVS 1300 文字排版 线性DP相关推荐

  1. css文字效果(文字剪贴蒙版,text-shodow的应用,文字排版等…)

    原文:css文字效果(文字剪贴蒙版,text-shodow的应用,文字排版等-) 记录几种常见的文字效果 示例查看:http://pangyongsheng.github.io/cssFont/ 一. ...

  2. 0x51.动态规划 - 线性DP(习题详解 × 10)

    目录 0x51.动态规划 - 线性DP 0x51.1 LIS问题 Problem A. 登山 (最长下降子序列) Problem B. 友好城市(思维) Problem C. 最大上升子序列和 0x5 ...

  3. UVA11584 划分成回文串 Partitioning by Palindromes(线性DP划分+DP判断回文串)

    整理的算法模板合集: ACM模板 依旧是线性DP 我们使用闫氏DP分析法 总体DP转移的时间复杂度为O(n2)O(n^2)O(n2). 但是这里牵扯到判断 i\tt ii 到 j\tt jj 是否为回 ...

  4. dev c++自动排版_再也不头疼文字排版了

    前言 在办公时,我们经常会需要用到Word,经常需要到网上查找一些资料然后整理排版,如果想提高文字排版.整理的效率.那么小编给你推荐Gidot Typesetter 这款非常好用的排版软件. Word ...

  5. (转)iOS7界面设计规范(10) - UI基础 - 文字排版与配色

    明天就是周四了.貌似前几天还在恨周一呢.话说今天几乎开了一整天的会,正经事情没做多少:这种感觉比一整天从早到晚12个小时的忙碌于一件事情还要让人感到疲惫的对叭?那今天的iOS7设计规范更新又是一篇很简 ...

  6. css网页布局中文字排版的属性和用法

    前段时间,学习了几个大的网站的图文混排的方法.今天总结下, css网页布局中文字排版的相关属性以及用法 .包括:设定字体.颜色.大小.段落空白,首字下沉.首行缩进.中文字的截断.固定宽度词内折行(wo ...

  7. 洛谷P2401 不等数列(线性DP)

    本题使用的是线性DP.就是DP数组难以思考,这里我直接给出 dp[i][j]:表示 1 ~ i 这 i 个数 , 其中j 个 " < " 有几种方法 假设我们已经把 n - ...

  8. Bootstrap4+MySQL前后端综合实训-Day02-AM【Bootstrap4(入门、环境搭建、文字排版、颜色、表格、图片、进度条、折叠、输入框组、模态框)、Font Awesome字体图标】

    [Bootstrap4前端框架+MySQL数据库]前后端综合实训[10天课程 博客汇总表 详细笔记] 目   录 Typora语法 Day01-知识回顾 1.前端部分 flex布局 2.Bootstr ...

  9. CodeForces - 1096D Easy Problem(线性dp)

    题目链接:点击查看 题目大意:给出一个字符串,每个字符都有一个权值,现在需要删除权值和最少的字符,满足字符串中不再含有子序列"hard" 题目分析:线性dp,但我不会,看着题解写的 ...

最新文章

  1. BIO与NIO、AIO的区别(这个容易理解)
  2. RuntimeError: An attempt has been made to start a new process before the current pr
  3. 详解音视频直播中的低延时
  4. 咖啡馆的故事:FTP, RMI , XML-RPC, SOAP, REST一网打尽
  5. ViewPager实现页面切换
  6. 超炫的iphone应用UI/UX设计赏析
  7. read函数头文件 window_of_property_read_string 剖析
  8. slf4j与logback的结合使用
  9. 电脑键盘下划线怎么打_电脑键盘失灵怎么办?你应该学会的四种方法
  10. 小米路由器mini 刷潘多拉固件教程
  11. eclipse字体大小调整
  12. 中医电脑cac处方系统 最好的杀毒软件
  13. wps居中对齐不在中间_wps有时候居中对齐不是在中间
  14. 自费出书多少钱?如何出书
  15. 生物信息相关国家自然科学基金汇总(持续更新中)
  16. 四毛子算法与+-1RMQ
  17. hash和history路由的区别
  18. 法国 计算机金融 大学,法国金融专业大学排名(2020年上交大)_快飞留学
  19. 记毕业季——回忆四年大学,青春无悔【正能量】
  20. ​程序员如何挣外快?

热门文章

  1. 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加...
  2. PHP企业级开发环境配置全攻略-IDE+SVN++(转)
  3. as3 physaxe 2d 物理引擎
  4. Web中的鼠标自动移动
  5. 未捕获的异常 'NSInternalInconsistencyException'
  6. Spark 连接 HBase 入库及查询操作
  7. Java 微服务框架对比:Dubbo 和 Spring Cloud
  8. jqgrid多选和禁止某行记录选择
  9. 标题 日期问题java蓝桥杯,日期类的使用(java)-蓝桥杯
  10. android sqlite 备份数据库文件,android – 将SQLite数据库备份和还原到sdcard