Algorithm 最大化以字母r结尾的行数

Algorithm 最大化以字母r结尾的行数,algorithm,Algorithm,我只是想知道我在上一次算法测试中遇到的一个问题。问题是关于一个男孩的写作和论文。他想最大限度地增加以“r”结尾的行数,因为他觉得这会使他的论文(what…)得到更高的分数 无论如何,文章的限制条件是,每行的最后72-80个字符需要有一个字母,除非包含下一个单词会在一行中超过80个字符(例如,如果添加下一个单词会使该行有80多个字符,我们可以在72-80个字符点中有一行没有字母),或者它是最后一行(最后一行可以少于72个字符) 例如,如果约束为10-15而不是72-80,则格式如下所示: 1234

我只是想知道我在上一次算法测试中遇到的一个问题。问题是关于一个男孩的写作和论文。他想最大限度地增加以“r”结尾的行数,因为他觉得这会使他的论文(what…)得到更高的分数

无论如何,文章的限制条件是,每行的最后72-80个字符需要有一个字母,除非包含下一个单词会在一行中超过80个字符(例如,如果添加下一个单词会使该行有80多个字符,我们可以在72-80个字符点中有一行没有字母),或者它是最后一行(最后一行可以少于72个字符)

例如,如果约束为10-15而不是72-80,则格式如下所示:

123456789012345

The slow blue  
dog is  
entertaining
在保持72-80个字母的限制的同时,是否有一种有效的算法来最大化以字母“r”结尾的行数?我们不能为了使以“r”结尾的行数减少而切割整个单词

我尝试使用的算法实现了这一点:

  • 检查当前行的72-80处是否有从72开始的字母“r”
  • 如果72-80中没有字母“r”,我们就尽量把这一行填满,然后转到下一行
  • 如果72-80中有字母“r”,我们将结束这一行
  • 重复1,直到没有更多行
  • 这个贪婪算法的主要问题是第2步。尽可能多地填充这一行可能会妨碍将来以“r”结尾的一行

    将此算法与10-15约束一起使用将得到:

    123456789012345
    The man was in 
    the backgarden  
    or the yard
    
    但最佳解决方案是:

    123456789012345
    The man was 
    in the 
    backgarden or 
    the yard
    

    :(

    这可以通过动态规划解决方案来完成

    给文本中的每个单词打分,如果文本以“r”开头,则以“r”结尾的最大行数(即,如果删除了前面的所有内容)

    例如,最后一个单词的分数是0或1(取决于它是否以“r”结尾)。第一个单词的分数就是你需要的答案

    通过从最后一行到第一行检查单词来计算分数。对于给定的单词,分析所有可能的情况以创建第一行。对于给定的可能性,分数将是第二行中第一个单词的分数,如果第一行以“r”结尾,则加1。给定单词的分数将是最佳可能性的分数

    使用示例文本“该男子在后花园或院子里”:


    计算完分数后,为了构建最佳的行距文本,您从第一个单词开始,为第一行选择最佳可能性(如上所述),然后重复下一行的第一个单词。

    为什么第二个“最佳解决方案”是合法的?如果约束是每行10-15个字符,那么“在”和“院子里”就不合法了非法行?如果添加下一个单词会导致一行超过15个字符,那么一行可以少于10个字符。在这种情况下,添加“backgarden”将使第二行的长度达到17个字符。至于“the yard”你说得对。我忘了提到最后一行可以少于10个字符。编辑。@Andy是否可以剪切整行文字以使行以“r”结尾。还有每行的最小长度是多少?@Smac89不可以剪切整行文字以使行以“r”结尾.我应该补充一下.编辑.我认为算法对dfs的要求比dp@Smac89我不理解你的评论。算法是dp而不是dfs。不,我的意思是这个问题。解决它所需的算法应该是某种dfs,而不是dfsdp@Smac89我给出了一个解决这个问题的dp算法,所以我还是不理解你的评论,联合国你可以展示一个在某些方面更好的dfs算法(我对此表示怀疑,因为假设最大行大小不变,该算法在线性时间内工作)@Smac89也许DFS指的是所有可能性的直接递归搜索,这将提供指数时间。添加基于起始词的记忆后,它将基本上与我的算法相同,除了作为自顶向下的DP而不是自下而上的DP。
    yard: score 0
    the: score 0
    or: score 0 (only possibility for first line is "or the yard")
    backgarden: score 1 (there are two possibilities for first line, the better one
                         is "backgarden or" which gives the score of "the" plus 1).
    the: score 0 (only possibility for first line is "the backgarden")
    in: score 1 (first line is "in the" which gives the score of "backgarden")
    was: score 1
    man: score 1 (first line is either "man was in" or "man was in the". The second
                  option gives the score of "backgarden" which is 1.
    The: score 1 (best first line is "The man was" which gives the score of "in").