二进制。
m非常大,就算是O(m)做法也会T,于是考虑一些奇技淫巧。
把m表示成二进制,假设是10110,那么只需要1000,100,10,1,(10110-1000-100-10-1)五个钱袋,因为前四个钱袋可以表示1~1111的所有数目,而剩下的钱显然不会超过1111可以之间装起来。
于是答案为满足 2x>m 的最小x
#include<cstdio>
int main()
{
int n, i;
scanf("%d",&n);
for(i=1; (1<<i)<=n; i++);
printf("%d",i);
}