Beispiel #1
0
        static void Main(string[] args)
        {
            using (var prob = new CodeJamProblem("D:\\CodeJam\\test.in"))
            {
                var TestCount = prob.ReadLineInt32();

                for (var i = 0; i < TestCount; i++)
                {
                    prob.ReadInts(out MaxE, out R, out N);
                    AValues = prob.ReadInt32Array();
                    UsedE   = new int[N];

                    bool[] Tested     = new bool[N];
                    int    MaxGain    = 0;
                    int    MaxGainInd = -1;

                    bool Again = true;

                    while (Again)
                    {
                        Again      = false;
                        MaxGain    = 0;
                        MaxGainInd = -1;

                        for (var k = 0; k < N; k++)
                        {
                            if ((Tested[k] == false) && (AValues[k] > MaxGain))
                            {
                                MaxGainInd = k;
                                MaxGain    = AValues[k];
                            }
                        }
                        if (MaxGainInd > -1)
                        {
                            Tested[MaxGainInd] = true;
                            UsedE[MaxGainInd]  = CalcEnergy(MaxGainInd);
                            if (UsedE[MaxGainInd] > 0)
                            {
                                Again = true;
                            }
                            UsedE[MaxGainInd] -= Correct();
                            if (UsedE[MaxGainInd] > 0)
                            {
                                Again = true;
                            }
                            else
                            {
                                UsedE[MaxGainInd] = 0;
                            }
                            if (Correct() < 0)
                            {
                                Again = false;
                            }
                        }
                    }


                    int Gain = 0;
                    for (var k = 0; k < N; k++)
                    {
                        Gain += UsedE[k] * AValues[k];
                    }
                    prob.OutputCase(Gain);
                }
            }
        }