题解 P2095 【营养膳食】

· · 题解

看到楼下的几位后笑了。。。

既然是贪心,那多半需要排序,答案要的是脂肪,所以按脂肪从大到小排序。

#include<cstdio>
#include<algorithm>
using namespace std;
int b[10001];
struct ben
{
    int y,z;
}a[10001];
int cmp(const ben &a,const ben &b)
{
    return a.y>b.y;
}//脂肪从大到小
int main()
{
    int n,m,k;
    scanf("%d%d%d",&n,&m,&k);
    for(int i=1;i<=k;i++)
    {
        scanf("%d",&b[i]);
    }
    for(int i=1;i<=n;i++)
    {
        scanf("%d%d",&a[i].y,&a[i].z);
    }
    sort(a+1,a+n+1,cmp);
    int ans=0;//答案别忘赋初值
    for(int i=1;i<=n;i++)
    {
        if(b[a[i].z]>0&&m>0)//还没超过这一类和总共规定
        {
            b[a[i].z]--;
            m--;
            ans+=a[i].y;//加上脂肪
        }
    }
    printf("%d",ans);
    return 0;
} 

求过