题目描述
输入n块地,每块地需要ti天开垦,消耗ci资源可以减少一天开垦时间,每块地最低开垦时间为k天,求如何分配资源使得所消耗的时间最短(由最多消耗时间的那块地决定)
样例
4 9 2
6 1
5 1
6 2
7 1
5
思路
将输入的天数整合,相同天数消耗的资源累加在一起,获取最大天数,天数减减,直到m<0或者天数等于k(最短天数)
C++ 代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long LL;
int n,k,t,c;
LL m;
int f[100010]={0};
int main(){
cin >> n >> m >>k;
for(int i=0;i<n;i++){
cin >> t >> c;
f[t]+=c;
if(t>=max_t){
max_t= t;
}
}
int num=0;
int i = max_t;
for(i;i>k;i--){
num+=f[i];
m-=num;
if(m<0){
break;
}
}
cout << i;
}