其中的cu为单个物品的开销cost,vu为单个物品的价值value,nu为物品个数。
void divide(int cu,int vu,int nu)
{
int i=1;
while(nu-i>=0)
{
cost[++n]=cu*i;
value[n]=vu*i;
nu-=i;
i<<=1;
}
if(nu)
{
cost[++n]=cu*nu;
value[n]=vu*nu;
}
}
按这种方式生成的物品能够等效于一个一个地放物品,并且时间复杂度从O(N)降为O(logN)。