游客 Signup | Login
中文 | En

2618 - 营养膳食

阿月正在女朋友宁宁的监督下完成自己的增肥计划。

为了增肥,阿月希望吃到更多的脂肪。然而也不能只吃高脂肪食品,那样的话就会导致缺少其他营养。阿月通过研究发现:真正的营养膳食规定某类食品不宜一次性吃超过若干份。比如就一顿饭来说,肉类不宜吃超过1份,鱼类不宜吃超过1份,蛋类不宜吃超过1份,蔬菜类不宜吃超过2份。阿月想要在营养膳食的情况下吃到更多的脂肪,当然阿月的食量也是有限的。

Input

输入第一行包含三个正整数n(n≤200),m(m≤100)和k(k≤100)。表示阿月每顿饭最多可以吃m份食品,同时有n种食品供阿月选择,而这n种食品分为k类。第二行包含k个不超过10的正整数,表示可以吃1到k类食品的最大份数。接下来n行每行包括2个正整数,分别表示该食品的脂肪指数ai和所属的类别bi,其中ai≤100,bi≤k。

Output

输出一个数字即阿月可以吃到的最大脂肪指数和。

Examples

Input

6 6 3
3 3 2
15 1
15 2
10 2
15 2
10 2
5 3

Output

60

Solution C++

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<queue>
using namespace std;
struct pos
{
	int num;
	int dist;
}f[500];
int cmp(pos i,pos j)
{
	return i.num>j.num;
}
int main()
{
	int n,m,k;
	cin>>n>>m>>k;
	int maxk[k+10];
	for(int i=1;i<=k;++i)
	{
		cin>>maxk[i];
	}
	
	for(int i=1;i<=n;++i)
	{
		cin>>f[i].num>>f[i].dist;
	}
	
	sort(f+1,f+n+1,cmp);
	int ans=0;
	int sum=0;
	for(int i=1;i<=n;++i)
	{
		if(maxk[f[i].dist]!=0)
		{
			ans=ans+f[i].num;
			maxk[f[i].dist]--;
			sum++;
		}
		if(sum==m)
		{
			break;
		}
	}
	cout<<ans;
	return 0;
	
	
}
Time Limit 1 second
Memory Limit 128 MB
Discuss Stats
上一题 下一题