"#include \n#include \n#include \n\nusing namespace std;\n\n// 判断是否能分成k段,使得每一段的总和里面的最小值最大\nbool canSplitIntoKSegments(vector& nums, int k, int minSum) {\n int count = 0;\n int sum = 0;\n for (int i = 0; i < nums.size(); i++) {\n sum += nums[i];\n if (sum >= minSum) {\n count++;\n sum = 0;\n }\n }\n return count >= k;\n}\n\nint splitIntoKSegments(vector& nums, int k) {\n int left = 0;\n int right = 0;\n for (int i = 0; i < nums.size(); i++) {\n left = max(left, nums[i]);\n right += nums[i];\n }\n \n int result = 0;\n while (left <= right) {\n int mid = left + (right - left) / 2;\n if (canSplitIntoKSegments(nums, k, mid)) {\n result = mid;\n left = mid + 1;\n } else {\n right = mid - 1;\n }\n }\n \n return result;\n}\n\nint main() {\n vector nums = {1, 2, 3, 4, 5, 6, 7, 8, 9};\n int k = 3;\n \n int minSum = splitIntoKSegments(nums, k);\n \n cout << "每一段的总和里面的最小值最大为:" << minSum << endl;\n \n return 0;\n}\n" 该程序使用二分查找的方式,从最小值到最大值之间寻找一个最大的值,使得序列能够分成k段,且每一段的总和里面的最小值大于等于该值。首先确定最小值left为序列中的最大值,最大值right为序列中所有数的和。然后进行二分查找,判断当前mid值是否满足条件,如果满足则更新结果为mid,并向右边搜索更大的值;如果不满足则向左边搜索更小的值。最终返回结果result即为每一段的总和里面的最小值最大值。