求助该题的原理

liujiangbo 2009-11-08 11:10:44
用1个或多个互不相同的正整数及它们的和可以表示一个范围内的连续的整数,
例如1、2、4三个数可以表示1…7之间的所有整数1、2、1+2、4、1+4、2+4、1+2+4
现要表示1…511之间的连续整数应至少有多少个不同整数?这些整数是哪几个?

PS:已经知道答案,但是不知道原理,请大虾告诉我原理谢谢了。。
...全文
181 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
morilasi 2009-11-10
  • 打赏
  • 举报
回复
讨论过很多次了貌似
绿色夹克衫 2009-11-09
  • 打赏
  • 举报
回复
这题用Dp做也可以,Pn= Sum(P1-Pn-1) + 1.
这对于这道题,用2进制解更直观,但如果条件有变换,DP的思路仍然可以解
wsxhd 2009-11-09
  • 打赏
  • 举报
回复
2^0~~2^8 9个数
提示:这个可以用数学归纳法,1、2、4可以表示1~7的所有数,而后面每一个数都是它前面所有数的 和+1
qiuzhenguang 2009-11-09
  • 打赏
  • 举报
回复
1楼的方法确实很妙!
bjq19841220 2009-11-09
  • 打赏
  • 举报
回复
额 应该是1,2,4,8,16,32,64,128,256.9个数才对吧。一楼的牛牛方法很直观,另外你参考一下等比数列求N项和的公式,将那个公式逆过来看就可以了
夜雨_倚琴 2009-11-09
  • 打赏
  • 举报
回复
这是其实是经典的信息熵问题啦。

证明如下:
假设所取的数为N1,N2, .. Nm。

按照题意,1-511中
任何一个数都能被表示成 : 0|1 * N1 + 0|1 *N2 + ... + 0|1*Nm.(0|1表示可以是0或者1)
这样一共有2^m个数,去除全为0的,这样:
N1, N2, ... Nm可以表示的数的个数为2^m - 1个。

所以 2^m - 1 >= 511.
m >= log(512) = 9
pacunove 2009-11-08
  • 打赏
  • 举报
回复
顶楼上,答案是1、2、4、8、16、32、64、128。8个数
phpjspasp 2009-11-08
  • 打赏
  • 举报
回复
想一想二进制表示。
1 00 0000 0001
511 01 1111 1111

所以需要
00 0000 0001
00 0000 0010
00 0000 0100
00 0000 1000
00 0001 0000
00 0010 0000
00 0100 0000
00 1000 0000
01 0000 0000
你转化成十进制就可以了

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧