Problem
问题描述:
乔治有一些同样长的小木棍,他把这些木棍随意砍成几段,直到每段的长都不超过$50$。
现在,他想把小木棍拼成原来的样子,但是却忘记了自己开始时有多少根木棍和它们的长度。
给出每段小木棍的长度,编程帮他找出原始木棍的最小可能长度。
输入:
输入文件共有二行。第一行为一个单独的整数$n$表示砍过以后的小木棍的总数,其中$n≤64$,第二行为$n$个用空格隔开的正整数,表示$n$根小木棍的长度。
输出:
输出文件仅第一行,表示原始木棍的最小可能长度。
输入输出样例:
1 | Input #1 |
1 | Output #1 |
Solution
显然这是一道搜索题。
由于每根原始木棍长度一样,所以答案必然能整除所有木棍总长度,并且不能比最长的那一根短。
搜索的结束条件是 剩下的木棍根数 $=0$ 且 当前原始木棍剩余长度 $=0$。
如果 当前原始木棍剩余长度 $=0$,那么之后的木棍就应放到下一根里去。
具体剪枝方案见代码注释。
1 |
|
Data
测试数据 提取码:3gag
无注释代码也一起放了进去,供大家参考。