【HDOJ】【BestCoder Round #84】1001 Aaronson

问题描述

给出一个不定方程 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   (0im)  都是非负的.

输入描述

输入包含多组数据, 第一行包含一个整数 T(1T10 5 )  表示测试数据组数. 对于每组数据:
第一行包含两个整数 n  m(0n,m10 9 ) .

输出描述

对于每组数据, 输出  i=0 m x i   ​​的最小值.

Solution 

题目有一个补充条件, x  为整数

很容易看出来这就是个二进制拆分的问题,二进制为1 的位 x  对应为1 ,如果超出了 2 m   的部分就用 2 m   去补,很明显会比用更小的去填要好。

#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);
    }
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值