题目倒是不难,但是读起来很恶心
根据题目的描述不容易找到适合存储的方法
后来我就想不跟着出题人的思路走
我自己开一个数组c
令c[a[i]] = b[i]
则c[i] == [j] 代表第i天对应有j个果子成熟
接着用贪心的方法做就好了
当前天尽可能收取昨天的果子,在收完的情况下再考虑今天的果子
代码如下:
#include <cstdio>
#include <iostream>
#include <algorithm>
#define MAXN 10010
#define ll long long
using namespace std;
int c[MAXN];
int a, b;
ll t, v, n, ans;
void f(int i) {
if(c[i] && t) {
if(c[i] > t) {
ans += t;
c[i] -= t;
t = 0;
}
else {
ans += c[i];
t -= c[i];
c[i] = 0;
}
}
}
int main(void) {
while(cin >> n >> v) {
ans = 0;
for(int i=1; i<=n; ++i) {
cin >> a >> b;
c[a] += b;
}
for(int i=1; i<3005; ++i) {
t = v;
f(i-1);
f(i);
// f(i+1);
}
cout << ans << endl;
}
return 0;
}