思路:
每天要么以今天的价格买入,要么前面某天买了存在仓库里。不存在一半是今天买的,一半是从仓库拿的,这种情况。
因为如果这样,肯定有一半具有更高的性价比,那就全部都改成更高性价比的方式就好了。。
所以,这题只需要保存一个当前的最大值,扫描一遍就能出结果了。瞬间就沦为一道水题了。还以为要大动作的呢。
#include <stdio.h>

__int64 N, S;

__inline __int64 min(__int64 a, __int64 b)


{
return a < b ? a : b;
}

int main()


{
__int64 best, i, c, y, sum, inc;

freopen("e:\\test\\in.txt", "r", stdin);

scanf("%I64d%I64d", &N, &S);
best = 1LL << 60;
sum = 0;
inc = (N - 1) * S;

for (i = 0; i < N; i++)
{
scanf("%I64d%I64d", &c, &y);
best = min(best, c + inc);
sum += y * (best - inc);
inc -= S;
}
printf("%I64d\n", sum);

return 0;
}
