问题标题: 酷町堂:2620

0
0
已解决
周明轩
周明轩
资深光能
资深光能

题目描述 Description

约翰有N(1≤N≤10,000)粒花种等待播种,每粒花种播种需要1个单位时间。每粒花种都有一个最迟需要种下去的时间di,如果超过这个时刻,那么这粒花种就只能被丢弃了。每粒花种到开花后能带来gi的价值。从0时刻开始计时。

请计算约翰最多能获得的最大价值。

输入描述 Input Description

第一行,一个整数,N
接下来N行,每行两个整数,gi di

输出描述 Output Description

约翰最多能获得的花的价值

样例输入 Sample Input

4 10 3 7 5 8 1 2 1

样例输出 Sample Output

25

数据范围及提示 Data Size & Hint

1≤gi≤1,000
1≤di≤10,000

30分:

#include<bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std;
struct flower{
    int g,d;
}f[10005];
bool cmp(flower a,flower b){
    if(a.d!=b.d){
        return a.d<b.d;
    }
    return a.g>b.g;
}
int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>f[i].g>>f[i].d;
    }
    sort(f+1,f+1+n,cmp);
    int time=0;
    int ans=0;
    for(int i=1;i<=n;i++){
        if(time<=f[i].d){
            ans+=f[i].g;
            time++;
        }
    }
    cout<<ans;
    return 0;
}

 


0
已采纳
董宇昊
董宇昊
初级启示者
初级启示者

你的头像是故意装作被禁言的吧!

还有,你把火车头去了试试

0
0
0
我要回答