本文主要是介绍摄入维生素,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
HINT:
Time Limit:C/C++ 1000MS,Other 2000MS
Memory Limit:C/C++ 256MB,Other 512MB
Score:100
Description
为了维持健康,小星希望吃到更多的维生素。然而也不能只吃高维生素食品,那样的话就会导致缺少其他营养。阿月通过研究发现:真正的健康膳食规定某类食品不宜一次性吃超过若干份。
比如就一顿饭来说,肉类不宜吃超过 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
一个数字即阿月可以吃到的最大维生素指数和。
Sample Input 1
6 6 3 3 3 2 15 1 15 2 10 2 15 2 10 2 5 3
Sample Output 1
60
AC:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m,k,a[1005];
struct Lemon{int vin;int zl;
};
bool yorg(Lemon f,Lemon l){if(f.vin!=l.vin){return f.vin>l.vin;}else{return a[f.zl-1]>a[l.zl-1];}
}int main(){cin>>n>>m>>k;for(int i=0;i<k;i++){cin>>a[i];}Lemon c17[n];for(int i=0;i<n;i++){cin>>c17[i].vin>>c17[i].zl;}int sum=0;sort(c17,c17+n,yorg);for(int i=0;i<n;i++){if(a[c17[i].zl-1]!=0){a[c17[i].zl-1]--;sum+=c17[i].vin;m--;}if(m==0){break;}}cout<<sum;return 0;
}
这篇关于摄入维生素的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!