Ejemplo n.º 1
0
    static object Solve()
    {
        var n = int.Parse(Console.ReadLine());
        var a = Read();

        var dp = new MemoDP2 <long>(n + 1, n + 1, long.MinValue, (t, i, j) =>
        {
            var v = t[i - 1, j];
            if (t[i - 1, j - 1] >= 0)
            {
                v = Math.Max(v, t[i - 1, j - 1] + a[i - 1]);
            }
            return(v);
        });

        for (int i = 0; i <= n; i++)
        {
            dp[i, 0] = 0;
        }
        for (int j = 1; j <= n; j++)
        {
            dp[0, j] = -1;
        }

        return(Enumerable.Range(0, n + 1).Last(j => dp[n, j] >= 0));
    }
Ejemplo n.º 2
0
    static object Solve()
    {
        var n = int.Parse(Console.ReadLine());
        var a = Read();

        var rn  = Enumerable.Range(0, n).ToArray();
        var is0 = Array.FindAll(rn, i => a[i] == 0);         // i
        var is1 = Array.FindAll(rn, i => a[i] == 1);         // j

        var m = is0.Length;

        var dp = new MemoDP2 <int>(m + 1, n - m + 1, -1, (t, i, j) =>
        {
            return(Math.Min(t[i - 1, j - 1] + Math.Abs(is0[i - 1] - is1[j - 1]), t[i - 1, j]));
        });

        for (int i = 0; i <= m; i++)
        {
            dp[i, 0] = 0;

            for (int j = i + 1; j <= n - m; j++)
            {
                dp[i, j] = 1 << 30;
            }
        }

        return(dp[m, n - m]);
    }
Ejemplo n.º 3
0
    static object Solve()
    {
        var n = int.Parse(Console.ReadLine());
        var a = ReadL();

        Array.Sort(a);

        var dp = new MemoDP2 <long>(n, n, -1, (t, i, j) =>
        {
            return(Math.Min(t[i + 1, j], t[i, j - 1]) + a[j] - a[i]);
        });

        for (int i = 0; i < n; i++)
        {
            dp[i, i] = 0;
        }

        return(dp[0, n - 1]);
    }