斯沃琪(SWQ)的吃货计划

斯沃琪(SWQ)的吃货计划
难度级别:A; 运行时间限制:1000ms; 运行空间限制:256000KB; 代码长度限制:2000000B
试题描述

  SWQ正在完成自己的“尝遍世界的美食”(虽然她破产了,但还是可以从地上捡东西吃呀……真不卫生……)计划。
  为了尝遍世界的美食,SWQ希望吃到更多的食物(食材)。然而也不能只吃一种食品,那样的话就会导致缺少其他营养。SWQ通过自己专业当吃货11年的经验(几乎是一出生就开始吃……)发现:真正的营养膳食规定某类食品不宜一次性吃超过若干份。比如就一顿饭来说,肉类不宜吃超过1份,鱼类不宜吃超过1份,蛋类不宜吃超过1份,蔬菜类不宜吃超过2份。SWQ想要在营养膳食的情况下吃到更多的食物,当然SWQ的食量也是有限的。

输入
*第一行:有三个正整数n,m,k表示SWQ每顿饭最多吃m道菜,有n道菜SWQ可以选择,这些菜被分成了k类
*第二行:有k个整数表示这k种类别的菜最多可以吃多少份。
*接下来的n行每行有两个数,分别代表所含的食材数与所属的类别。

输出
*一个数,代表吃货SWQ最多可以吃到几种食材。
输入示例
6 6 3
3 3 2
15 1
15 2
10 2
15 2
10 2
5 3
输出示例
60
其他说明
LJX认为:
n<=200
m<=100
k<=100
#include<iostream>
using namespace std;
int a[200][3],b[200],c[200],h[100];
int i,j,sum=0,cnt=0,n,m,k,g;
int main()
{
    cin>>n>>m>>k;
    for(i=0;i<k;i++) cin>>h[i];
    for(i=0;i<n;i++) cin>>b[i]>>c[i];
    for(i=0;i<n;i++)
    {
        g=i;
        for(j=i+1;j<n;j++) if(b[g]<b[j]) g=j;
        if(g!=i)
        {
            swap(b[g],b[i]);
            swap(c[g],c[i]);
        } 
    }
    for(i=0;i<n;i++)
    {
        if(h[c[i]-1]>0&&m>0)
        {
            h[c[i]-1]--;
            m--;
            sum+=b[i];
        }
        if(m==0) break;
    }
    cout<<sum;
    //system("pause");
    return 0;
}
原文地址:https://www.cnblogs.com/LZHE/p/5655807.html