void-man

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

给出几种颜色需求的ml量,然后最后一个数是灰色需求量,灰色可以由任何三中不同颜色的颜色组成,每个颜料盒有所给出的颜色的炎凉50ml

问最少给出几个颜料盒,可以组成所需求颜色

显然贪心可以解决,先求出满足的普通色所需的最小盒数,然后把剩余颜料从大到小排列,那前三种每个取出1ml组成1

ml的灰色,在这里本来我是把选出三个颜色中,直接选取第三个(最小容量)的所有容量k,组成kml的灰色,后来发现不行,贪心必须每次都要要求最好

所以每次1ml来选才能达到要求

#include <stdio.h>
#include <string.h>
#include <algorithm>
#define N 15
using namespace std;
bool cmp(int a,int b)
{
    return a>b;
}
int co[N],n,gay,cnt;
int main()
{
    int max;
    while(scanf("%d",&n)!=EOF,n)
    {
        max=-1;cnt=0;
        for(int i=0;i<n;i++)
        {
            scanf("%d",&co[i]);
            if(co[i]>max)max=co[i];
        }
        scanf("%d",&gay);
        cnt+=max/50;
        if(max%50!=0)cnt++;
        for(int i=0;i<n;i++)
        co[i]=cnt*50-co[i];
        while(gay>0)
        {
            sort(co,co+n,cmp);
            if(co[2]>0)
            {
                gay--;
                co[0]--;
                co[1]--;
                co[2]--;
            }
            else
            {
                cnt++;
                for(int i=0;i<n;i++)
                co[i]+=50;
            }
        }
        printf("%d\n",cnt);


    }
}
posted on 2011-05-31 23:16  void-man  阅读(393)  评论(0)    收藏  举报