8,028
社区成员
发帖
与我相关
我的任务
分享
int[] items = new int[] { 2, 3, 4, 5, 6, 7, 8 }; int sum = 35, count = 7; int[,] matrix = new int[items.Length + 1, sum + 1]; for (int i = 0; i < matrix.GetLength(0); i++) for (int j = 0; j < matrix.GetLength(1); j++) matrix[i, j] = -2; matrix[0, 0] = -1; for (int i = 0; i < items.Length; i++) { for (int j = 0; j <= sum; j++) { if (matrix[i, j] == -2) continue; for (int k = matrix[i, j] + 1; k < items.Length; k++) { if (j + items[k] > sum) break; if (matrix[i + 1, j + items[k]] == -2) matrix[i + 1, j + items[k]] = k; else matrix[i + 1, j + items[k]] = Math.Min(matrix[i + 1, j + items[k]], k); } } } if (matrix[count, sum] == -2) Console.WriteLine("{0} 个数的和 = {1} 无解", count, sum); else { while (sum > 0) { Console.WriteLine(items[matrix[count, sum]]); sum -= items[matrix[count, sum]]; count--; } }