我发现好像优先队列可以做,每次不够时取小根堆的堆顶。
int s = 0,i = 1,now = 0,cost = 0;
q.push(c[1]);
while(i != n){
if(now - v[i] < 0){
int p;
for(int j = 1;j <= 1e9;j ++){
if(now + d * j >= v[i]){
p = j;
break;
}
}
cost += p * q.top();
now += d * p;
}
now -= v[i];
i ++;
q.push(c[i]);
}
这样一来 cost 就是花费。
各位大佬帮我看看这样有什么问题没有。