#include <iostream>
using namespace std;
int main(){
int n = 9;
int m = 3;
int arr[] = { 9, 8, 7, 6, 5, 4, 3, 2, 1 };
int **r = new int*[n];
for (int i = 0; i < n; i++){
r[i] = new int[m]();
}
r[0][0] = arr[0];
for (int i = 1; i < n; i++){
r[i][0] = r[i-1][0] + arr[i];
}
for (int i = 1; i < m; i++){
r[i][i] = arr[i];
}
//数组处理
for (int j = 1; j < m; j++){
for (int i = j+1; i < n; i++){
int min = INT_MAX;
int max = 0;
for (int k = j; k < i; k++){
max = (r[i][0] - r[k][0])>r[k][j - 1] ? (r[i][0] - r[k][0]) : r[k][j - 1];
//让主序列和达到最大值,左边(r[i][0] - r[k][0])的是从k个到i的序列分成一组,右边r[k][j - 1]的是前k个序列分成j-1组;
min = min < max ? min : max;
}
r[i][j] = min;
}
}
for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++){
cout << r[i][j] << " ";
}
cout << endl;
}
cout << endl;
cout << "子序列和最大值的最小值为:" << r[n - 1][m - 1] << endl;
return 0;
}
最小m段和
最新推荐文章于 2023-12-06 14:59:03 发布
