混合顏料
思路:貪心,每次去前三個剩餘顏料數量最多的,只給灰色顏料增加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;
}