1048: QAQ的纸币问题(二)
时间限制: 1 Sec 内存限制: 128 MB
提交: 17 解决: 6
[提交][状态][讨论版]
题目描述
这天无聊的QAQ又在研究纸币的组合问题,QAQ发现只需要1、2、7
三种面值就可以通过加法和减法组成1−10的所有数字。如:
1=1
2=2
3=1+2
4=7−1−2
5=7−2
6=7−1
7=7
8=1+7
9=2+7
10=1+2+7
QAQ想知道最少需要多少种不同的面值就可以构成从1−N的所有数字,由于N
很大,就请了你这个BestCoder来帮他。
PS:构成每一个数字,同种面值最多使用一张。
输入
第一行输入一个整数T
,代表有T组测试数据。
每组数据输入一个整数N
,代表上面提到的信息。
注:1<=T<=666666,1<=N<=666666
。
输出
输出一个整数代表最后的结果。
样例输入
3
1
10
666666
样例输出
1
3
13
每次取当前可以取到的最大钱数的 2 倍 + 1 即为最优解~~
AC代码:
#include<cstdio>
int main()
{
int T,n;
scanf("%d",&T);
while(T--){
scanf("%d",&n);
int ans = 0,nl = 0;
while(ans < n){
ans += ans * 2 + 1;
nl++;
}
printf("%d\n",nl);
}
return 0;
}