题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1192
比较关键的话是“并且不有两个钱袋装有相同的大于1的金币数”
这句话给出了两个信息:
1,大于1的袋子不能重复
2,等于1的袋子可以重复
因为袋子是越少越好,又涵盖了所有数,所以就很容易联想到拆分二进制数,答案就是二进制下的位数
贴代码
#include<cstdio>
#include<cstring>
using namespace std;
int n,ans;
int main(){
freopen("1968.in","r",stdin);
freopen("1968.out","w",stdout);
scanf("%d",&n);
ans=0;
while (n!=0) ans++,n/=2;
printf("%d",ans);
return 0;
}
【写的有漏洞的,欢迎路过大神吐槽】
2016/12/25 23:29:21
Ending.