poj 2709 混合顏料

                                                 混合顏料

思路:貪心,每次去前三個剩餘顏料數量最多的,只給灰色顏料增加1ml,不夠的話加一份(全加50ml)

Description

雜貨店出售一種由N(3<=N<=12)種不同顏色的顏料,每種一瓶(50ML),組成的顏料套裝。你現在需要使用這N種顏料;不但如此,你還需要一定數量的灰色顏料。雜貨店從來不出售灰色顏料——也就是它不屬於這N種之一。幸運的是,灰色顏料是比較好配置的,如果你取出三種不同顏色的顏料各x ml,混合起來就可以得到x ml的灰色顏料(注意不是3x)。

現在,你知道每種顏料各需要多少ml。你決定買儘可能少的“顏料套裝”,來滿足你需要的這N+1種顏料。那麼你最少需要買多少個套裝呢?

Input

輸入包含若干組測試數據。每組數據一行:第一個數N, 3<=N<=12, 含義如上;接下來N+1個數,分別表示你需要的N+1種顏料的毫升數。最後一種是灰色。所有輸入的毫升數<=1000.

注意:輸入中不存在每個顏料套裝的毫升數。由題意可知,每種各50ml,即一共50N ml

Output

每組數據輸出一行,最少需要的套裝數。

Sample Input

3 40 95 21 0

7 25 60 400 250 0 60 0 500

4 90 95 75 95 10

5 0 0 0 0 0 333

0

Sample Output

2

8

2

4

#include <iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int nee[13];
int cmp(int a,int b)
{
    if(a-b>0) return 1;
    else return 0;
}
int main()
{
    int n;//顏色種數
    while(scanf("%d",&n)!=EOF)
    {
        if(n==0) break;
        int i,gray;
        for(i=0;i<n;i++)
        {
            scanf("%d",&nee[i]);
        };
        scanf("%d",&gray);
        sort(nee,nee+n,cmp);
        int max=nee[0];
        int flag=0;
        if(max%50) flag=1;
        int count=max/50+flag;
        for(i=0;i<n;i++) nee[i]=50*count-nee[i];//剩餘
        sort(nee,nee+n,cmp);
        while(gray)
        {
            if(nee[2]<=0)
            {count++;
             for(i=0;i<n;i++) nee[i]+=50;
             }
              nee[0]--;
              nee[1]--;
              nee[2]--;
              gray--;
              sort(nee,nee+n,cmp);
        }
        printf("%d\n",count);
    }
    return 0;
}


發佈了28 篇原創文章 · 獲贊 2 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章