作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4098562.html

题目链接:print neatly 整齐打印 算法导论

考虑在一个打印机上整齐地打印一段文章的问题。输入的正文是$n$个长度分别为$L_1,L_2,\dots ,L_n$(以字符个数度量)的单词构成的序列。我们希望将这个段落在一些行上整齐地打印出来,每行至多$M$个字符。“整齐度”的标准如下:如果某一行包含从i到j的单词$(i<j)$,且单词之间只留一个空格,则在行末多余的空格字符个数为 $M - (j-i) - (L_i+ \cdots + L_j)$,它必须是非负值才能让该行容纳这些单词。我们希望所有行(除最后一行)的行末多余空格字符个数的立方和最小。请给出一个动态规划的算法,来在打印机整齐地打印一段又$n$个单词的文章。分析所给算法的执行时间和空间需求。

使用动态规划算法,$dp[i]$表示从第一个单词到第$i$个单词所需要的最小代价。对于每一个单词分别考虑自己单独一行,和前一个单独占据一行$\ldots$ 和前$k$个单词占据一行的情况,其中从$k$到$i$的字符串长度不超过每行最多所能容纳的字符串长度$m$,最后从后向前遍历$dp$数组,计算分别把最后的$k$个单词作为最后一行,且不计算代价的情况下最小的代价。

代码如下:

 #include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <limits.h>
#define MAXN 2010
using namespace std;
typedef long long LL;
LL dp[MAXN], w[MAXN][MAXN];
int len[MAXN];
int n, m;
LL solve()
{
memset(dp, , sizeof(dp));
memset(w, -, sizeof(w));
for( int i = ; i <= n ; i++ )
{
for( int j = ; j <= n ; j++ )
{
w[][j] = ;
}
}
for( int i = ; i <= n ; i++ )
{
for( int j = i ; j <= n ; j++ )
{
int tmp = m - (j-i) - (len[j]-len[i-]);
if( tmp < )
{
break;
}
w[i][j] = tmp*tmp*tmp;
}
}
dp[] = ;
for( int i = ; i <= n ; i++ )
{
dp[i] = dp[i-]+w[i][i];
for( int j = i- ; j >= ; j-- )
{
if( w[j+][i] < ) break;
dp[i] = min(dp[i], dp[j] + w[j+][i]);
}
}
LL res = dp[n];
for( int i = n ; i >= && w[i][n] >= ; i-- )
{
res = min(res, dp[i-]);
}
return res;
}
int main(int argc, char *argv[])
{
while( scanf("%d%d", &n, &m)!=EOF )
{
len[] = ;
for( int i = ; i <= n ; i++ )
{
scanf("%d", &len[i]);
}
for( int i = ; i <= n ; i++ )
{
len[i] = len[i-] + len[i];
}
printf("%lld\n", solve());
}
}
//input:(n, m, arr[i])
//5 5
//4 1 1 3 3
//5 6
//1 3 3 2 3
//output:
//17
//

print neatly 整齐打印 算法导论的更多相关文章

  1. 堆排序与优先队列——算法导论(7)

    1. 预备知识 (1) 基本概念     如图,(二叉)堆是一个数组,它可以被看成一个近似的完全二叉树.树中的每一个结点对应数组中的一个元素.除了最底层外,该树是完全充满的,而且从左向右填充.堆的数组 ...

  2. [算法导论]二叉查找树的实现 @ Python

    <算法导论>第三版的BST(二叉查找树)的实现: class Tree: def __init__(self): self.root = None # Definition for a b ...

  3. (搬运)《算法导论》习题解答 Chapter 22.1-1(入度和出度)

    (搬运)<算法导论>习题解答 Chapter 22.1-1(入度和出度) 思路:遍历邻接列表即可; 伪代码: for u 属于 Vertex for v属于 Adj[u] outdegre ...

  4. 算法导论学习-Dynamic Programming

    转载自:http://blog.csdn.net/speedme/article/details/24231197 1. 什么是动态规划 ------------------------------- ...

  5. 《算法导论》归并排序----merge-sort

    伪代码请见<算法导论>2.3节 merge-sort实现: public class MergeSort {        public static void sort(double [ ...

  6. 《算法导论》插入排序----InsertSort

    算法导论,插入排序 public class InsertSort { public static double [] sort(double [] num) { for(int i =1; i< ...

  7. 算法导论 之 红黑树 - 删除[C语言]【转】

    转自:https://blog.csdn.net/qifengzou/article/details/17608863 作者:邹祁峰 邮箱:Qifeng.zou.job@hotmail.com 博客: ...

  8. [算法导论]quicksort algorithm @ Python

    算法导论上面快速排序的实现. 代码: def partition(array, left, right): i = left-1 for j in range(left, right): if arr ...

  9. 《算法导论》— Chapter 15 动态规划

    序 算法导论一书的第四部分-高级设计和分析技术从本章开始讨论,主要分析高效算法的三种重要技术:动态规划.贪心算法以及平摊分析三种. 首先,本章讨论动态规划,它是通过组合子问题的解而解决整个问题的,通常 ...

随机推荐

  1. iOS stretchableImageWithLeftCapWidth 图片放大不变形

    转载自:http://www.cnblogs.com/bandy/archive/2012/04/25/2469369.html - (UIImage *)stretchableImageWithLe ...

  2. linux和windows文件名称长度限制

    Linux文件名称的长度限制是255个字符 windows下全然限定文件名称必须少于260个字符,文件夹名必须小于248个字符. linux下文件数.文件夹数.文件名称长度的各种限制 下面測试都是在没 ...

  3. delphi 连接mysql

    Delphi连接MySQL真麻烦,研究了一天,从网上找了无数文章,下载了无数插件都没解决.最后返璞归真,老老实实用ADO来连接,发现也不是很顺利,但最终还是连接成功了.多少有点心得:ADO各个组件的作 ...

  4. iOS开发——UI篇OC篇&不规则排列的图片布局

    不规则排列的图片布局 一直在500px上看照片,发照片.以前看它的首页图片展示就只是觉得好看,洋气,也没想过自己在iOS上实现一下.昨天不知怎么的就开始想其中的算法了,现在我把思考的过程在这里贴出来分 ...

  5. mysql 高可用方案漫谈(一) 转阿里云

    https://yq.aliyun.com/articles/2237?spm=5176.blog2238.yqblogcon1.7.e5fyEy#index_section

  6. vmware安装 ios10.8 过程

    前言:由于mac笔记本太贵,并且对于用thinkpad 习惯的我,实在是不想买mac,没办法,只能在win7下面使用vmware 安装mac虚拟机了.但是ios的版本一直变,vmware也一直在升级, ...

  7. Windows 8.1 Hyper-V安装的虚拟机

    一.安装Hyper-v Hyper-V内置于Windows 8中,用户无需格外的下载安装文件,只需要到Windows 8的程序管理中将其选中开启功能即可. 具体步骤:控制面板→程序→启用或关闭Wind ...

  8. Mysql性能调优

    在MYSQL命令行客户端添加 \G 语句终止符可以让返回的结果集垂直显示. 一.查找运行缓慢的 SQL语句 :show full processlist ; 二.生成一个查询执行计划(Query Ex ...

  9. 20 Best Drag and Drop jQuery Plugins--reference

    reference from:http://dizyne.net/20-best-drag-drop-jquery-plugins/ jQuery has done a great job repla ...

  10. Input

    Input Basic Input Old Input Files Please note that both Input and Request do NOT sanitize your data, ...