BZOJ1192: [HNOI2006]鬼谷子的钱袋

题目大意:给一个数字m,将其分为最少的组,使任意组合可以得到小于等于m的所有数。

题解:

这题非常的简单,几乎是秒出结论。

考虑将1-m间的每个数进行二进制分解,那么最少的组数就是m的二进制的位数。

这个结论十分显然。

如果觉得不显然或不相信的可以手算几组。。。

代码:

#include<cstdio>
using namespace std;
int n,ans;
int main(){
	scanf ("%d",&n);
	while (n) n>>=1,++ans;
	printf ("%d\n",ans);
	return 0;
}

  

上一篇:bzoj 1192: [HNOI2006]鬼谷子的钱袋 思维_二进制


下一篇:[HNOI2006]最短母串问题 (ac