题解 P2095 【营养膳食】
ShineEternal · · 题解
看到楼下的几位后笑了。。。
既然是贪心,那多半需要排序,答案要的是脂肪,所以按脂肪从大到小排序。
#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;
}
求过