大意:一个array有n个元素,每个元素为0.可以执行下面两个操作:
1) 选择其中一个元素加1
2)对所有元素乘2
现在有一个目标数组,求最少的操作达到目标数组。
int calc(int v, int abs)
{
int ret = 0;
while (v > 0)
{
if (v % 2 == 1 || abs == 0)
{
v--;
ret++;
}
if (abs > 0)
{
v /= 2;
}
}
return ret;
}
int getMin(vector<int> dv)
{
int r = 0x7fffffff;
for (int cntDouble = 0; cntDouble < 15; cntDouble++)
{
int tn =0;
for (int i=0; i<dv.size(); i++)
{
tn += calc(dv[i], cntDouble);
}
r = min(r, tn+cntDouble);
}
return r;
}
好聪明的想法。