实在找不出问题了
  • 板块P2095 营养膳食
  • 楼主micmic
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/3/30 14:41
  • 上次更新2023/10/28 05:10:51
查看原帖
实在找不出问题了
504142
micmic楼主2022/3/30 14:41
#include<iostream>
#include<string>
#include<algorithm>
#include<math.h>
using namespace std;

int n,m,k;		//最多吃m份,有n种食品,分为k类
int maxeat[105];//第i种食物能吃的最大数量就是maxeat[b[i]] 
int a[205];	//脂肪数 
int b[205];	//所属类别

//从n种里边选m份,k类食品不能超过maxeat[k],吃的份数最大==m,sum+=a[i],最终获得最大值 
int eaten[105];//eaten[b[i]]是i对应的食品种类已经吃的数量
int eatnum; //吃的食物份数 
int sum; 

int main(){
	cin>>n>>m>>k;
	
	for(int i=1;i<=k;i++)
		cin>>maxeat[i];
		
	for(int i=1;i<=n;i++)
    	cin>>a[i]>>b[i];
    	
    //从脂肪多的开始吃,所以排个序,把大的移到前边 
    for(int i=n;i>=1;i--)
    	for(int j=i-1;j>=1;j--){
    		if(a[i]>a[j]){
    			swap(a[i],a[j]);
    			swap(b[i],b[j]);
			}
		}

		
   for(int i=1;i<=n;i++){
   		//遍历n种食品
		 if(eatnum<m && eaten[b[i]]<maxeat[b[i]]){
		 	sum+=a[i];
		 	eaten[b[i]]++;
		 	eatnum++;
		
		 }
		if(eatnum==m){
			cout<<sum;
			return 0;
		}
	} 

}
2022/3/30 14:41
加载中...