回 帖 发 新 帖 刷新版面

主题:一题递归,帮帮忙!

聪明的阿卑多
也许你从没听说过阿卑多,但你一定知道他爷爷的爷爷的爷爷,那就是聪明绝顶的阿凡提先生。是的,阿卑多也是个聪明的小孩。
    一天,阿卑多骑着他的小毛驴,在小镇上晃悠,正好遇上了小巴依——那个自以为是的小财主。小巴依正在炫耀他的金币:
    “你们见过这样的金币么?这可不是一般的金币,你看它们多大多重啊!最主要的是,它们每个上面都刻有我的名字和一个编号,是独一无二的!看看,从我出生开始,每2个月,爸爸便给我1个特做的大金币,并从1开始编号,现在我已经有60枚了,哈哈……”小巴依见了阿卑多,于是便想考一考他:“阿卑多,听说你是最聪明的。看见我每个金币上的数字了吗?你现在拿取一半的金币,并能用你拿的若干金币上的数的和表示我的任意一枚金币上的数。如果你能办到,那么就奖你一枚金币;如果不能,就给我做三年长工好了。”阿卑多想了一想,说:“我可以只拿1/10就办到,不过如果我办到了,你就得分一半金币给我。”     1/10?小巴依心想,你准备给我当长工好了。
    于是阿卑多开始取金币……自然,阿卑多出色的完成了任务,得到了30枚金币,同样的,他把这些金币都分给了穷人们。
    给你的任务就不同了。
输入:一个数n(1<=n<=1000) 表示金币枚数(金币上的数分别为1到n)
输出:两个数,阿卑多最少要拿的金币数以及不同的方案数。
样例:
Abido.in     Abido.out 
6          3  2 (2种拿法:拿取编号为1、2、3的金币;或拿取编号为1、2、4的金币)
测试数据
输入    输出
1    1 1
127    7 1
32    6 724
500    9 74
800    10 13632426

回复列表 (共4个回复)

沙发

我用For循环做的,太愚蠢了!求求各位大虾,帮帮忙.........

板凳

我在想你是不是错误理解题目了,
我觉得正确答案应该是:
1,2,4,8,16,32
六枚金币刚好是六十枚的十分之一.
可以组合成从1到60的任何一个数字.
不应该用递归,用循环就对了:

for i=0 to 5
    print 2^i,
next

3 楼

最少金币数=log(总数-1)\log(2)
不同的方案数?(题目要求不明确)

4 楼

题目是要求我们求出有几钟方案数,好难呢!
下面是我从网上淘到的另一种“聪明的阿卑多”:
聪明的阿卑多

Time Limit:10000MS  Memory Limit:65536K
Total Submit:18 Accepted:13 
Case Time Limit:1000MS 

Description 

【问题描述】: 
也许你从没听说过阿卑多,但你一定知道他爷爷的爷爷的爷爷,那就是聪明绝顶的阿凡提先生。是的,阿卑多也是个聪明的小孩。 
一天,阿卑多骑着他的小毛驴,在小镇上晃悠,正好遇上了小巴依——那个自以为是的小财主。小巴依正在炫耀他的金币:“你们见过这样的金币么?这可不是一般的金币,你看它们多大多重啊!最主要的是,它们每个上面都刻有我的名字和一个编号,是独一无二的!看看,从我出生开始,每2个月,爸爸便给我1个特做的大金币,并从1开始编号,现在我已经有60枚了,哈哈……” 
小巴依见了阿卑多,于是便想考一考他:“阿卑多,听说你是最聪明的。给你任意三个顶点A,B,C,问你从顶点A走到顶点B并且经过顶点C的最短路径的条数有多少?如果你能算出,那么就奖你一枚金币;如果不能,就给我做三年长工好了。” 
阿卑多想了一想,自己完成没有多大的问题,现在他想来考考学习信息学奥赛的你,请你编程帮助他来顺利的完成。 


Input 

输入的第一行为两个正整数m、n,m表示顶点的个数,n表示边的条数,第二行为三个整数A,B和C,A表示起点,B表示终点,C表示要问你经过那个顶点;接下来有n行分别表示两条相临的边的编号及距离;

Output 

输出从顶点A到顶点B,经过C这个顶点的最短路径的条数。 
【数据范围】:0 < m<= 1000,n <= 499500,所有数据计算过程中都不会超过longint; 


Sample Input 


4 5
1 4 2
1 2 2
1 3 1
2 4 2
2 3 1
3 4 3


Sample Output 


2

Source 

xinyue
各位大虾帮帮忙吧...

我来回复

您尚未登录,请登录后再回复。点此登录或注册