1010-K

        1.题目编号:1010-K
2.简单题意:一套颜料包含各种颜色,现在需要其他颜色 n  ml,灰色 G ml,灰色由任意三种颜色可配成,不过混合后体积不变,也就是说 50 ml 50 ml 50ml 三种其他颜色可混合 50 ml  灰色。求需要购买多少套颜料。
3.解题思路形成过程:先获得不需要灰色的时候,所需的颜色数量,然后得到每个颜色剩下颜料l数,从剩下的颜色中,每次取体积最大的三种,每种取1ml,获得1ml的灰色,如果颜色用完了,输出加一,相应的每个颜色剩下的颜料数加上50,再依次下去,直到获得了对应的灰色。
4.感想:细心多想,有时候wa就因为有一些想不到的数据,要考虑一些极端数据或者特殊数据。

5.AC代码:

#include <iostream>
using namespace std;

int main()
{
    int co_num;
    cin >> co_num;
    while(co_num!=0)
    {
        int gra_num,max=0;
        int* color=new int[co_num];
        int ki_num;
        for(int i=0;i<co_num;i++)
            cin >> color[i];
        cin >> gra_num;
        for(int i=0;i<co_num;i++)
        {
            if(max < color[i])
                max = color[i];
        }
        ki_num = max/50+(max%50==0?0:1);
        int temp=ki_num*50;
        for(int i=0;i<co_num;i++)
            color[i]=temp-color[i];
        while(gra_num!=0)
        {
            int m1=0,m2=1,m3=2;
            for(int i=3;i<co_num;i++)
            {
                if(color[i] > color[m1])
                    m1 = i;
                else if(color[i] > color[m2])
                    m2 = i;
                else if(color[i] > color[m3])
                    m3 = i;
            }
            if(color[m1]>0 && color[m2]!=0 && color[m3]!=0)
            {
                color[m1]--;
                color[m2]--;
                color[m3]--;
                gra_num--;
            }
            else
            {
                ki_num++;
                for(int i=0;i<co_num;i++)
                    color[i]+=50;
            }
        }
        cout << ki_num << endl;
        cin >> co_num;
    }
}


你可能感兴趣的:(ACM,贪心算法)