题目倒是不难,可是读起来非常恶心
依据题目的描写叙述不easy找到适合存储的方法
后来我就想不跟着出题人的思路走
我自己开一个数组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; }