问题描述
![](https://img-blog.csdnimg.cn/img_convert/569fdd420434d67af52f565d610bcbe3.png)
输入输出要求
![](https://img-blog.csdnimg.cn/img_convert/d3bfae492c11ccc653c110d8c85e8ea0.png)
测试数据
//输入1
4 9 2
6 1
5 1
6 2
7 1
//输出1
5
//输入2
4 30 2
6 1
5 1
6 2
7 1
输出2
2
思路
- 由最大天数向下递减,(以m>=所需资源,i>=k为限制条件),将同一天数的组别合并在一起。
代码
#include <iostream>
using namespace std;
int main()
{
//VERSION 1
int n,m,k;
int date[100001]={0};
int t=0,temp,t1;//temp-输入的中间变量
cin>>n>>m>>k;//田的数目/总资源/最少的天数
for(int i=0;i<n;i++)
{
cin>>temp>>t1;//输入每个田所需天数/单位资源
date[temp]+=t1;//记录每个田所需天数
t=max(t,temp); //最终t是最大天数
}
for(int i=t;i>=k;i--)
{
if(m>=date[i])//判定资源还够
{
m-=date[i];//每次减少对应的土地化肥数
date[i-1]+=date[i];//本级田地(按所需天数)降级,与下一级合并
}else{
cout<<i;
return 0;
}
}cout<<k;
return 0;
}