Logic Puzzle Challenge 2

Divide $1048 (in whole $ increments) into a number of bags so that I can ask for any amount between $1 and $1048, and you can give me the proper amount by giving me a certain number of these bags without opening them. 

What is the minimum number of bags you will require?


通过二叉树的方式做出来了

1048 = 524 + 524 

524   = 262 + 262

262   = 131 + 131

131   = 1 + 130 (这里应该算重点,为何要拆成1+x的形式。当时主要考虑到除以二是最快的分法,而且1是必要的原子,就分了)

130   = 65 + 65

65     = 5 + 60  (思路二:拆成最近的原子+偶数的形式,显然2+63不适合;而3+62的原子3太大,最好用1、2来凑,所以先写成5+60)

60     = 30 + 30

30     = 2 + 28 (为何不是15+15?考虑到快要到最小值了,可能拼出1、2最重要)

28     = 14 + 14

14     = 4 + 10   (最开始用的14 = 7 + 7,7 = 3+4,这样算出来的答案是12个,不对,然后回过去修改,发现4+10可以做到更少,就改了)

蓝色标注的就是最后的分法


显然,这种题目应该有相应的数学模型,ACM接触不多,不太清楚。自己抽象一下:

条件:对任意的正整数n,拆成任意数和的形式,拆出来的数姑且称为原子。

要求:这些原子要能表示1-n 之间的任意整数,求原子的最小个数。


形式化描述:

已知:a = a1 + a2 + ... + an

对任意的b,1<= b <= a,都能表示为a1-an中某几项和的形式

求n的最小值

要是有知道的同学,请赐教

 

 

 

posted @ 2012-07-23 16:33  handt  阅读(295)  评论(0编辑  收藏  举报