using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Maishuwenti { class Program { public const int larg = 100000; static void Main(string[] args) { int[] n1 = new int[] { 3,4,2,1,0}; double solution = find_BestSol(n1[0],n1[1],n1[2],n1[3],n1[4]); Console.WriteLine("最好的解决方案{0}", solution); Console.ReadLine(); } public static double find_BestSol(int x1, int x2, int x3, int x4, int x5) { int[] n = new int[5] { x1, x2, x3, x4, x5 }; rerank(ref n); x1 = n[0]; x2 = n[1]; x3 = n[2]; x4 = n[3]; x5 = n[4]; if (n[0] > 0) { Console.WriteLine("n[0]>0"); return Min(8.0 + find_BestSol(x1, x2, x3, x4, x5 - 1), 2 * 8 * 0.95 + find_BestSol(x1, x2, x3, x4 - 1, x5 - 1), 3 * 8 * 0.9 + find_BestSol(x1, x2, x3 - 1, x4 - 1, x5 - 1), 4 * 8 * 0.8 + find_BestSol(x1, x2 - 1, x3 - 1, x4 - 1, x5 - 1), 5 * 8 * 0.75 + find_BestSol(x1 - 1, x2 - 1, x3 - 1, x4 - 1, x5 - 1)); } else if ((n[0] == 0) && (n[1] > 0)) { Console.WriteLine("n[1]>0"); return Min(8.0 + find_BestSol(x1, x2, x3, x4, x5 - 1), 2 * 8 * 0.95 + find_BestSol(x1, x2, x3, x4 - 1, x5 - 1), 3 * 8 * 0.9 + find_BestSol(x1, x2, x3 - 1, x4 - 1, x5 - 1), 4 * 8 * 0.8 + find_BestSol(x1, x2 - 1, x3 - 1, x4 - 1, x5 - 1), larg); } else if ((n[0] == 0) && (n[1] == 0) && (n[2] > 0)) { Console.WriteLine("n[2]>0"); return Min(8.0 + find_BestSol(x1, x2, x3, x4, x5 - 1), 2 * 8 * 0.95 + find_BestSol(x1, x2, x3, x4 - 1, x5 - 1), 3 * 8 * 0.9 + find_BestSol(x1, x2, x3 - 1, x4 - 1, x5 - 1), larg, larg); } else if ((n[0] == 0) && (n[1] == 0) && (n[2] == 0) && (n[3] > 0)) { Console.WriteLine("n[3]>0"); return Min(8.0 + find_BestSol(x1, x2, x3, x4, x5 - 1), 2 * 8 * 0.95 + find_BestSol(x1, x2, x3, x4 - 1, x5 - 1), larg, larg, larg); } else if ((n[0] == 0) && (n[1] == 0) && (n[2] == 0) && (n[3] == 0) && (n[4] > 0)) { Console.WriteLine("n[4]>0"); return 8.0 + find_BestSol(x1, x2, x3, x4, x5 - 1); } else { Console.WriteLine("都为0"); return 0; } } public static void rerank(ref int [] m) { //冒泡排序 for (int i = m.Length-1; i >0; i--) { for (int j = 0; j < i; j++) { if (m[j]>m[j +1]) { int temp; temp = m[j + 1]; m[j + 1] = m[j]; m[j] = temp; } } } } public static double Min(double a, double b, double c, double d, double e) { double[] n = new double[5]; n[0] = a; n[1] = b; n[2] = c; n[3] = d; n[4] = e; Console.WriteLine("最小值为{0}", n.Min()); return n.Min(); } } }