csp202303-2-垦田计划-超简单题解
代码如下,解析见注释:
#include <iostream>
#include <algorithm>
using namespace std;
#define MAX 100001
int n,m,k;
int s[MAX];//记录当前耗时减少一天所需的代价
int p=0;//记录最长的耗时
int main()
{
cin>>n>>m>>k;
for(int j=1;j<=n;j++)
{
int t,c;
cin>>t>>c;
s[t]+=c;//合并记录相同耗时的区域缩减一天所需要的资源
p=max(p,t);
}
int i;
for(i=p;i>=k;i--)//最少耗时从原始最长耗时开始,每一步减少一天
{
if(s[i]>m)
break;//再减少一天所需资源已经超过所剩资源总数
m-=s[i];//当前最长耗时为i,使用资源使得最长耗时变为i-1,资源总数减去相应值
s[i-1]+=s[i];//代价加到耗时i-1所需的代价
}
cout<<i<<endl;
return 0;
}