题目链接
题目描述
求解思路
- 直接模拟:创建一个数组
arr[]
,a[i]
用来记录将第i
天缩短所需要的资源数。在读取数据的时候直接对数组进行初始化。maxTime
表示资源优化之前需要花费的最大天数。 - 需要注意:在进行优化遍历时,如果当前资源可以优化一天的时间,则当天优化所需要的资源量也要加到前一天中。因为在前一天再次优化时,这些任务依然存在。
实现代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
long n, m, k;
int maxDay = (int) 1e5 + 10;
int maxTime = 0;
int[] arr = new int[maxDay]; // 将第i天缩短需要的资源数
n = in.nextLong();
m = in.nextLong();
k = in.nextLong();
for (int i = 0; i < n; i ++) {
int t = in.nextInt();
int c = in.nextInt();
arr[t] += c;
maxTime = Math.max(maxTime, t);
}
long ans = k;
// 从最长的天数开始遍历
for (int i = maxTime; i > k; i --) {
// 如果资源可以使天数缩短
if (m > arr[i]) {
// 将被缩短天数所要的资源加到前一天上
arr[i - 1] += arr[i];
// 资源对应减少
m -= arr[i];
} else {
ans = i;
break;
}
}
System.out.println(ans);
}
}