题目描述
有一家牧场每天都会产出牛奶,在第 i 天,牛奶的产量为p[i]。生产的牛奶可以卖到市场上,在第 i 天,市场需求为 c[i]。如果市场需求不大,卖不掉牛奶,则多余的牛奶就会放进冷库保存。牛奶有一个保鲜期,如果超过了 m 天 (m 为一个给定的整数),就必须倒掉了。卖牛奶时,应先卖冷藏时间长的。
给定天数 n 以及每天的产量和收购量,请求出牧场一共可以卖出多少牛奶。
输入格式
第一行:两个整数 n 和 m;
第二行到第n+1 行:第i+1 行每行两个整数表示 p[i] 和 c[i]。
输出格式
单个整数表示答案。
数据范围
样例数据
输入:
5 2
50 0
100 0
250 0
300 0
1000 5000输出:
1550
说明:
最后一天的收购量很大,但第一天和第二天的牛奶由于过期不能出售了
输入:
5 5
0 2
2 3
5 0
3 0
2 0输出:
2
主要思想
算出可以卖的milk,再减去过期的milk,如果不满足市场要求,全都卖掉,否则直接break,输出答案。
代码实现
#include <bits/stdc++.h>
using namespace std;
int n, m;
int p[100005];
int c[100005];
long long ans;int main() {cin >> n >> m;for (int i = 1; i <= n; i++) {cin >> p[i] >> c[i];}int t = 1; //can卖出去的milkfor (int i = 1; i <= n; i++) {if (i - t > m) { //让顾客up吐下泻的milkt = i - m;}for (; t <= i; t++) {if (p[t] < c[i]) { //库存not满足需求ans += p[t]; //全部卖掉!!!!c[i]-=p[t];} else {ans += c[i]; //市场需求already finished,增加20RPp[t] -= c[i];break;}}}cout << ans;return 0;
}