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