Exemplo n.º 1
0
            public void Solve()
            {
                int       N = NextInt(), Ma = NextInt(), Mb = NextInt();
                const int MAX = 500;
                var       dp  = new int[N + 1, MAX, MAX];    //dp[i,a,b]=i?????a:b????????

                (N + 1).REP(i => MAX.REP(j => MAX.REP(k => dp[i, j, k] = int.MaxValue)));
                dp[0, 0, 0] = 0;
                var asum = 0;

                N.REP(i =>
                {
                    int ai = NextInt(), bi = NextInt(), ci = NextInt();
                    asum  += ai;

                    MAX.REP(a =>
                    {
                        MAX.REP(b =>
                        {
                            if (dp[i, a, b] == int.MaxValue)
                            {
                                return;
                            }
                            dp[i + 1, a, b]           = Min(dp[i, a, b], dp[i + 1, a, b]);
                            dp[i + 1, a + ai, b + bi] = Min(dp[i + 1, a + ai, b + bi], dp[i, a, b] + ci);
                        });
                    });
                });
                var min = int.MaxValue;

                (asum / Max(Ma, Mb)).REP(i => { if (i != 0)
                                                {
                                                    min = Min(dp[N, i * Ma, i * Mb], min);
                                                }
                                         });

                if (min == int.MaxValue)
                {
                    "-1".WL();
                }
                else
                {
                    min.WL();
                }

                return;
            }