public static IList <bool> Format(IList <bool> arr, int mask) { var result = new bool[mask - arr.Count].ToList(); result.AddRange(arr); return(result); }
static void Main() { int[] nm = Console.ReadLine().Split().Select(int.Parse).ToArray(); bool[,] isFriend = new bool[nm[0], nm[0]]; for (int i = 0; i < nm[1]; i++) { int[] xy = Console.ReadLine().Split().Select(x => int.Parse(x) - 1).ToArray(); isFriend[xy[0], xy[1]] = true; isFriend[xy[1], xy[0]] = true; } List <bool> dp = new bool[] { true, true }.ToList(); for (int i = 1; i < nm[0]; i++) { int power = (int)Math.Pow(2, i); bool[] table = new bool[power]; for (int j = 0; j < power; j++) { table[j] = false; if (dp[j]) { bool[] b = Convert.ToString(j, 2).Select(x => x == '1').Reverse().ToArray(); for (int k = 0; k < b.Length; k++) { if (b[k] && !isFriend[k, i]) { goto end; } } table[j] = true; } end :; } dp.AddRange(table); } int res = 0; for (int i = 0; i < dp.Count; i++) { if (dp[i]) { res = Math.Max(res, Convert.ToString(i, 2).Count(x => x == '1')); } } Console.WriteLine(res); }
static void Main() { var h = Read(); int n = h[0], m = h[1]; var x = Read(); int xab = x[0], xac = x[1], xbc = x[2]; var s = Console.ReadLine(); var es = new bool[m].Select(_ => Read()).ToList(); es.AddRange(es.ToArray().Select(e => new[] { e[1], e[0], e[2] })); // 1: AB, 2: BA // 3: AC, 4: CA // 5: BC, 6: CB for (int v = 1; v <= n; v++) { switch (s[v - 1]) { case 'A': es.Add(new[] { v, n + 1, xab }); es.Add(new[] { v, n + 3, xac }); es.Add(new[] { n + 2, v, 0 }); es.Add(new[] { n + 4, v, 0 }); break; case 'B': es.Add(new[] { v, n + 2, xab }); es.Add(new[] { v, n + 5, xbc }); es.Add(new[] { n + 1, v, 0 }); es.Add(new[] { n + 6, v, 0 }); break; case 'C': es.Add(new[] { v, n + 4, xac }); es.Add(new[] { v, n + 6, xbc }); es.Add(new[] { n + 3, v, 0 }); es.Add(new[] { n + 5, v, 0 }); break; default: break; } } Console.WriteLine(Dijkstra(n + 7, es.ToArray(), true, 1, n).Item1[n]); }