poj 2709 贪心暴搜

题意:给出需要几种颜料,和每种需要的数量,和灰色颜料需要的数量。要求的是至少需要买几套颜料才能满足要求。每套都包含所有需要的颜料,每种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;
}


你可能感兴趣的:(poj 2709 贪心暴搜)