这完全基于逻辑,并且在印度的信息学奥林匹克运动会的第一阶段被问到。直接的逻辑

时间:2015-02-19 07:22:41

标签: algorithm

  1. 在Gutenberg的印刷机中,每行文字都是通过放置单个金属来组装的 在机架中的字母,将墨水应用于字母,然后将它们压在纸上。 古腾堡需要使用他的印刷机印刷N个单词,一次一个字。该 印刷机允许以下操作: •在机架中当前单词的末尾添加一个字母。 •删除机架中当前单词的最后一个字母。 •打印机架中当前的单词。
  2. 最初,机架是空的;它不包含金属字母。在打印结束时, 古腾堡被允许在机架上留下信件。此外,他被允许打印单词 以他喜欢的任何顺序。由于每个操作都需要时间,他希望尽量减少 总运营数量。

    例如,他可以在20个行动中做到这一点:Gutenburg应打印出三个单词,{print,the,poem}, 这是

    的过程

    添加t,添加h,添加e,打印,删除最后一个字母(三次),添加p,添加o, 添加e,添加m,打印,删除最后一个字母(三次),添加r,添加i,添加n, 添加t,打印。

    在以下每种情况下,确定所需的最小操作数 以任何顺序打印出集合中的所有单词,一次打印一个单词。

    (a){那里,他们,她,岸,三,树,休息,因此,钍,因此,门槛}

    (b){问题,徽章,打印机,普拉迪普,波兰,荷兰,私人,帕特里克,诡计,滚轴,别针}

    (c){维度,除法,除法,偏差,包络,距离,方向,直接,推导,发展}

    我已经尝试但每次都失败了。第一个问题的答案是88-I,总是得到93 2到120就是答案。 第3~115就是答案。 我每次都出错了。 只需解决这里的三个问题中的一个问题,我将使用first-solve的解决方案来解决剩下的问题并展示其中一个问题。 提前谢谢。

1 个答案:

答案 0 :(得分:3)

因此,一旦你确定了打印单词的顺序,很明显该订单的最小操作数是多少:它是单词的总数(对于“打印”操作),加上总数您打印的第一个单词的长度,以及每个其他单词的长度,您需要从上一个单词的末尾删除的字母数,以及为完成新单词而需要添加的字母数。

至于决定打印单词的顺序,实际上只有两种方法可以保存操作:

  • 如果多个单词以相同的字母开头,则它们都应该相邻。在每个这样的组中,如果有多个单词以相同的两个字母开头,那么它们应该都是相邻的。等等。实现这一目标的最简单方法就是按字母顺序排列所有单词。
  • 最后一个单词应该是集合中最长的单词(或绑定为最长的单词),这样您就可以节省必须在最后删除这些字母。在对单词进行排序后,只需选择一个最长的单词,然后重新排列组 - 将故意相邻的单词放在一起 - 就可以将其放在最后。 (这很容易通过检查。如果你需要在代码中实现它,一种方法是使用stable排序算法按照与你最长的单词相同的首字母数对它们进行排序。已经选中了。)
    • 从你有93而不是88的事实,我怀疑你错过了这个优化?如果你只是将字母按字母顺序排列并保留在那里,那么你将以而非阈值结束,节省4个字母删除而不是9:我注意到93 - 9 = 88 - 4

所以,例如,对于 {那里,他们,她,岸,三,树,休息,因此,钍,因此,阈值} 我们有:

             letters to remove      letters to add         print!
             -----------------      --------------         ------
hence                        0                   5              1
her                          3                   1              1
rest                         3                   4              1
shore                        4                   5              1
tree                         5                   4              1
theirs                       3                   5              1
there                        3                   2              1
therefore                    0                   4              1
thorium                      7                   5              1
three                        5                   3              1
threshold                    1                   5              1

(您可以看到我在下移动了 th - 字以便以阈值结束)。在表中添加数字,我们得到88,正如预期的那样。