题意:
每一周产生牛奶的费用c和需求量y是不同的。牛奶可以保存,但每单元的牛奶保存一周需要费用s,问满足所有需求,最少的费用是多少?
我们选牛奶的,看的是费用,费用分为两个,一当前的费用 ,二之前的费用。但是我们可以看成一个。维护的时候,若当前的费用小,则只需保存当前的费用,若之前的费用小,则不管当前费用。
意思是:我们永远只维护一个最小值,因为如果牛奶要保存,我们肯定选取的是当前费用里,最小的哪一个。而它最小,就永远比之前的费用要小。
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn = 5000 + 5;
typedef long long LL;
int main()
{
int n, s;
while(scanf("%d%d", &n, &s) == 2)
{
int fe = maxn;
LL tot = 0;
for(int i = 0; i < n; i++)
{
int c, y;
scanf("%d%d", &c, &y);
fe = min(fe, c);
tot += y * fe;
fe += s;
}
printf("%lld\n", tot);
}
return 0;
}