Algorithm 最大化以字母r结尾的行数
我只是想知道我在上一次算法测试中遇到的一个问题。问题是关于一个男孩的写作和论文。他想最大限度地增加以“r”结尾的行数,因为他觉得这会使他的论文(what…)得到更高的分数 无论如何,文章的限制条件是,每行的最后72-80个字符需要有一个字母,除非包含下一个单词会在一行中超过80个字符(例如,如果添加下一个单词会使该行有80多个字符,我们可以在72-80个字符点中有一行没有字母),或者它是最后一行(最后一行可以少于72个字符) 例如,如果约束为10-15而不是72-80,则格式如下所示:Algorithm 最大化以字母r结尾的行数,algorithm,Algorithm,我只是想知道我在上一次算法测试中遇到的一个问题。问题是关于一个男孩的写作和论文。他想最大限度地增加以“r”结尾的行数,因为他觉得这会使他的论文(what…)得到更高的分数 无论如何,文章的限制条件是,每行的最后72-80个字符需要有一个字母,除非包含下一个单词会在一行中超过80个字符(例如,如果添加下一个单词会使该行有80多个字符,我们可以在72-80个字符点中有一行没有字母),或者它是最后一行(最后一行可以少于72个字符) 例如,如果约束为10-15而不是72-80,则格式如下所示: 1234
123456789012345
The slow blue
dog is
entertaining
在保持72-80个字母的限制的同时,是否有一种有效的算法来最大化以字母“r”结尾的行数?我们不能为了使以“r”结尾的行数减少而切割整个单词
我尝试使用的算法实现了这一点:
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").