题意:给出需要几种颜料,和每种需要的数量,和灰色颜料需要的数量。要求的是至少需要买几套颜料才能满足要求。每套都包含所有需要的颜料,每种50ml,没有灰色颜料,灰色的需要用其他任意三种(且只能三种)配成,而且体积不会增加,如用三种颜料,每种都是Xml,那么所配成的灰色颜料也是Xml。
思路:每次取剩下量最多的三个颜色配置成灰色,以此类推。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n,m,s[15];
int cmp(int a,int b){
return a>b;
}
bool test(int x){
int flag[15];
for(int i = 0;i<n;i++)
flag[i] = 50*x-s[i];
int num = m;
while(num--){
sort(flag,flag+n,cmp);
for(int i = 0;i<3;i++)
flag[i]--;
if(flag[2]<0)
return false;
}
return true;
}
int main(){
while(scanf("%d",&n) && n){
int low,high,mid;
low = 0;
for(int i = 0;i<n;i++){
scanf("%d",&s[i]);
low = max(s[i],low);
}
scanf("%d",&m);
low = (low+49)/50;
high = 50;
while(low<=high){
mid = (low+high)>>1;
if(test(mid))
high = mid-1;
else
low = mid+1;
}
printf("%d\n",low);
}
return 0;
}