[求助] 一道ACM题 分苹果 实在是想不出来,哪位牛人帮帮忙啊Description有1000个苹果和10个筐子,筐子的编号
[求助] 一道ACM题 分苹果 实在是想不出来,哪位牛人帮帮忙啊
Description
有1000个苹果和10个筐子,筐子的编号为1-10.现要将这1000个苹果放入这10个筐子,要求:
(1)编号大的筐子中的苹果数量要严格大于编号小的筐子中的苹果数.
(2)从1-1000中任取1个数字,这个数字都能由10个筐子中的某几个筐子的苹果数和组成.
注意:筐中的苹果是一个整体,不能取筐中的一部分苹果,即一旦选取某个筐子,该筐的苹果数就必须全部计入.
Input
没有输入.
Output
要求在屏幕上按"字典"升序打印出所有可行放法.
每行打印1种方法,按编号升序打印出对应的筐中苹果个数,中间用空格隔开.
注意:行尾不要有任何空格出现.
Example Input
Example Output
1 2 4 8 16 31 63 125 250 500
1 2 4 8 16 31 63 125 251 499
1 2 4 8 16 31 63 126 249 500
.
.
.
1 2 4 8 16 32 64 128 256 489
[解决办法]
应该是往 二进制 想吧,10位二进制,可以表示 1024之间任意数
[解决办法]
ACM的题果然给力,感觉弄ACM就是搞数据结构
[解决办法]
恩,数据结构与算法
[解决办法]
后边的编号要<=前边的编号之和+1,前2个必然为12,最后一个<=500能直接想到的大概就这些
[解决办法]
反向想的话,尽量折半500,250,125,63(62的话剩余1如果加到前边就更大了),31,16(15的话剩余1无处+),8,4,2,1
因此最小是1 2 4 8 16 31 63 125 250 500,最大就是按二进制1 2 4 8 16 32 64 128 256 489
写个函数求下一个满足条件(后边的编号要<=前边的编号之和+1)即可
