HDOJ6436 Problem K. Pow2

版权声明: https://blog.csdn.net/qq_16267919/article/details/81978936

Problem K. Pow2
预处理出凑出正负2的次幂所需的最少数字个数c[0/1][i]
f[0][i]表示凑出了i及之前的位置,之后的位置都是0的最小花费
f[1][i]表示凑出了i及之前的位置,之后的位置都是1(假设2^b减去了一个数,i+1到b-1位都是1)

    if (a[i]=='0')
        {
            cmin(f[0][i],f[0][i-1]);
            cmin(f[0][i],f[1][i-1]+c[0][i]);//在第i位补上一个1,即把b设为i
            cmin(f[1][i],f[1][i-1]+c[1][i]);//再多减去2^i
        }
        else
        {
            cmin(f[0][i],f[0][i-1]+c[0][i]);
            cmin(f[1][i],f[0][i-1]+c[1][i]);//在第i位减掉一个1,从i开始到b-1位都变成了1
            cmin(f[1][i],f[1][i-1]);
        }

Code

猜你喜欢

转载自blog.csdn.net/qq_16267919/article/details/81978936