这是一道贪心题
首先我们知道进入每个岛都有门票,这就涉及到一个问题:有一些高收益的岛也对应着高门票,我们没有那么多灵石,我们就要先进入低门票的岛(赚灵石),所以我们要贪门票。但有些黑心岛,门票比产出灵石还高,这种岛就不能去。
有了思路,事情就很简单了。用结构体将门票和收入绑定起来,将门票排序,在再遍历符合要求的岛即可。
代码如下:
using namespace std;
const long long N=1e5+10;
struct jj{
long long k,m;
}a[N];
bool cmp(jj a,jj b)
{
return a.m<b.m;
}
int main(){
long long n,k;
cin>>n>>k;
for(int i=1;i<=n;i++)
{
cin>>a[i].k>>a[i].m;
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++)
{
if(k>=a[i].m&&a[i].k>a[i].m)k=k+a[i].k-a[i].m;
}
cout<<k;
return 0;
}