贪心 以脂肪值作为比较大小的依据,重载小于号,按照脂肪值从大到小排序,之后贪心选择。
#include<cstdio> #include<iostream> using namespace std; int n,m,k; int ans=0; struct nn { int l,r; bool operator < (nn &b)const { return l>b.l; } }d[10010]; int c[10010]; int main() { cin>>n>>m>>k; for(int i=1;i<=k;i++) { cin>>c[i]; } for(int i=1;i<=n;i++) { cin>>d[i].l; cin>>d[i].r; } sort(d+1,d+n+1); for(int i=1;i<=n;i++) { if(m&&c[d[i].r]) { ans+=d[i].l; m--; c[d[i].r]--; } } cout<<ans<<endl; return 0; }