示例#1
0
    public void Proc()
    {
        int[] inpt = Reader.ReadLine().Split(' ').Select(a => int.Parse(a)).ToArray();
        this.AddWater1 = inpt[0];
        this.AddWater2 = inpt[1];
        this.AddSuger1 = inpt[2];
        this.AddSuger2 = inpt[3];
        this.MaxRate   = inpt[4];
        this.MaxTotal  = inpt[5];

        SugarWater ans = GetAns(0, 0);

        Console.WriteLine(ans.Total + " " + ans.Suger);
    }
示例#2
0
    private SugarWater GetAns(int water, int sugar)
    {
        if (sugar + water > this.MaxTotal)
        {
            return(new SugarWater());
        }
        SugarWater ans = new SugarWater(water, sugar);

        if (ans.Rate > MaxRate)
        {
            return(new SugarWater());
        }
        if (!dic.ContainsKey(water))
        {
            dic.Add(water, new Dictionary <int, SugarWater>());
        }
        if (dic[water].ContainsKey(sugar))
        {
            return(dic[water][sugar]);
        }
        SugarWater[] tmp = new SugarWater[4];
        tmp[0] = GetAns(water + AddWater1 * 100, sugar);
        tmp[1] = GetAns(water + AddWater2 * 100, sugar);
        tmp[2] = GetAns(water, sugar + AddSuger1);
        tmp[3] = GetAns(water, sugar + AddSuger2);
        foreach (SugarWater sw in tmp)
        {
            if (sw.Rate == ans.Rate)
            {
                if (sw.Total < ans.Total)
                {
                    ans = sw;
                }
            }
            else if (sw.Rate > ans.Rate)
            {
                ans = sw;
            }
        }
        dic[water][sugar] = ans;
        return(ans);
    }