csp202303-2-垦田计划-超简单题解

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;
}

满分

你可能感兴趣的:(c++,算法,开发语言)