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); }
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); }