每日一题[50] 步步为营

给定整数nn3),记f(n)为集合{1,2,,2n1}的满足如下两个条件的子集A的元素个数的最小值:

1A2n1A

A中的元素(除1外)均为A中另外两个元素(可以相同)的和.

(1)求f(3)的值;

(2)求证:f(100)108


cover (1)f(3)=5

首先,取集合{1,2,3,5,7}可以说明f(3)5

接下来只需要说明不满足符合条件的4个元素的集合.

由于7A,根据条件②,只需要逐一验证{1,2,5,7}{1,3,4,7}{1,2,6,7}1,3,6,7}{1,4,6,7}{1,5,6,7}即可.不难得到以上集合均不符合要求,因此f(3)5

综上,f(3)=5

(2)尝试用递推的方式解决问题.

首先尝试如何从nn+1.假设现在手头已经有一个满足题意的集合A={1,,2n1}它包含f(n)个元素,那么是否可以对此集合加以改造(增加若干元素),使得它对n+1的情形也符合题意呢?

毫无疑问,元素2n+11应当马上放入集合A.为了使得2n+11可以表示为集合A中的两个元素之和,还应当放入元素2n,2n+1,,2n+12中的至少一个.

稍加尝试可知确定放入元素2n就可以了,此时集合A{2n,2n+11}n+1的情形时符合题意.

这样我们就得到了递推式f(n+1)f(n)+2.

但这个递推式的成本很高,每将n推进1,需要增加2个元素.也就是无法应用该递推式得到f(100)108这么好的结果.

接下来寻找成本更为低廉的递推式,考虑n2n.此时面临的困难在于如何迅速从2n1到达22n1

事实上,每次翻番是非常好的前进方式:2n+12,2n+222,,22n2n,此时由于(22n2n)+(2n1)=22n1,因此A{2n+12,2n+222,,22n2n,22n1}是在2n的情形时符合题意的集合.

据此,我们有递推式f(2n)f(n)+n+1.

这个递推式的成本基本上和结论要求很相近了,接下来只需要交替使用这两种递推式(优先使用第二个递推式)就可以得到f(100)108.

此条目发表在每日一题分类目录,贴了标签。将固定链接加入收藏夹。

每日一题[50] 步步为营》有一条回应

  1. 大雨说:

    据此,我们又递推式f(2n)<=f(n)+n+1上面一行应该是“在2n的情况下符合题意的集合”吧!

发表回复