题目梗概
有m个金币,要放进n个袋子里面。要求这些袋子必须可以组成1-m这些个金币的情况下数量最少。
思考
一开始以为是递推啥的,但是转念一想应该用二进制来表示1-m这些数的,不重复而且每一个十进制数都可以用二进制数来表示。
#include <cstdio>
#include <cmath>
int main(){
unsigned int m;
scanf("%d",&m);
m = log2(m);
printf("%d",m+1);
return 0;
}
吐槽
洛谷的题目需要输出方案,所以略坑。 因为5 按照划分应该是 1 2 2 但是不符合规则 所以需要特判 1 1 3
最后说点题外话,最近没怎么写题目了。不是因为我颓废了,而且伤病在身,没法上机。只能拿手机看看题目,想想思路。