Beispiel #1
0
        public int debug(int[] L, int[] R, int m)
        {
            var n    = L.Length;
            var src  = n + m + 8;
            var sink = n + m + 9;
            var G    = new MinCostFlow(n + m + 10);

            for (int i = 1; i <= m; i++)
            {
                G.AddDirectedEdge(n + i, sink, 1, 0);
            }
            for (int i = 0; i < n; i++)
            {
                G.AddDirectedEdge(src, i, 1, 0);
                for (int j = 1; j <= L[i]; j++)
                {
                    G.AddDirectedEdge(i, n + j, 1, 0);
                }
                for (int j = R[i]; j <= m; j++)
                {
                    G.AddDirectedEdge(i, n + j, 1, 0);
                }
                G.AddDirectedEdge(i, sink, 1, 1);
            }
            var cost = G.Execute(src, sink);

            return(cost.Value);
        }