问题描述
给出一个不定方程 x 0 +2x 1 +4x 2 +...+2 m x m =n , 找出一组解 (x 0 ,x 1 ,x 2 ,...,x m ) , 使得 ∑ i=0 m x i 最小, 并且每个 x i (0≤i≤m) 都是非负的.
输入描述
输入包含多组数据, 第一行包含一个整数
T(1≤T≤10 5 )
表示测试数据组数. 对于每组数据:
第一行包含两个整数
n
和
输出描述
对于每组数据, 输出 ∑ i=0 m x i 的最小值.
Solution
题目有一个补充条件, x 为整数
很容易看出来这就是个二进制拆分的问题,二进制为
#include<stdio.h>
int main()
{
int T,n,m,ans;
scanf("%d",&T);
while (T--)
{
scanf("%d%d",&n,&m);
for (ans=0;n && m;n>>=1,m--) ans+=(n & 1);
ans+=n;
printf("%d\n",ans);
}
}