其中的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)。
新闻热点
疑难解答