用m个数表示1-n任意一个数,则可以考虑把n看成2的幂的和进行分解,m个数最多表示到2^m-1个数
地址:http://acm.scs.bupt.cn/onlinejudge/showproblem.php?problem_id=1202
AppleAndBox Submit: 552 Accepted:254 Time Limit: 1000MS Memory Limit: 65536K
Description
Monica有N个苹果和M个盘子,现在她需要将N个苹果分放到M个盘子里。
因为Monica希望做到一个很好的分配策略,不论Chandler需要多少个(1到N)苹果时,她总能拿出若干盘,这些盘子里的苹果数之和就是Chandler所需要的,而不必重新调整每个盘子里的苹果。
现在Monica告诉你N和M,请你帮她判断是否存在这样的分配策略。
Input
多则测试数据,以两个0结束。
每组数据占一行,两个整数N,M。
1 <= N < 2^32, 1 <= M <= 25
Output
对应每组输入数据,如果存在一种分配策略则输出“YES”,否则输出“NO”。
Sample Input
2 1
4 2
6 4
0 0
Sample Output
NO
NO
YES
Source
#include<iostream>
using namespace std;
int main()
{
int n,m,i;
while(scanf("%d%d",&n,&m)!=EOF)
{
if(n==0&&m==0)
break;
if((1<<m)>n) //关键代码,m个盘子最多可以表示(2^m)-1 个数 如3个盘子1+2+4
printf("YES/n");
else
printf("NO/n");
}
system("pause");
}