贪心AC了
查看原帖
贪心AC了
461167
liuyukang楼主2022/7/25 09:14
#include<bits/stdc++.h>
using namespace std;
long long n,k,m,ans,minn,f,s,h[500005];
struct node{int p,c,dv;}a[500005];
bool cmp1(node x,node y){return x.c<y.c||x.c==y.c&&x.p>y.p;}
bool cmp2(node x,node y){return x.p<y.p;}
int main(){
    cin>>n>>k>>m;
    for(int i=1;i<=n;i++)
    cin>>a[i].p>>a[i].c,a[i].dv=a[i].p-a[i].c;
    sort(a+1,a+n+1,cmp1);
    for(int i=1;i<=k;i++)
    if(m>=a[i].c)m-=a[i].c,ans++,h[i]=a[i].dv;
    else {cout<<ans;return 0;}
    sort(a+k+1,a+n+1,cmp2);
    for(int i=k+1;i<=n;i++)
    {
        minn=1e9;
        for(int j=1;j<=k;j++)
        if(h[j]<minn)minn=h[j],f=j;
        if(a[i].dv>minn)
		if(m-minn>=a[i].c)
        ans++,m-=(a[i].c+minn),h[f]=a[i].p-a[i].c;
        else break;
        else if(m>=a[i].p)ans++,m-=a[i].p;
		else break;	
    }
    cout<<ans;
    return 0;
}
2022/7/25 09:14
加载中...