#include<iostream>
using namespace std;
int main()
{
long m,n,i,j,k,startid,endid;
long long sum = 0, ans = 0;
int * value;
cin >> n >> m;
value = new int[n]; // 根据输入构建原数组
for (int i = 0; i < n; i++)
cin >> value[i];
ans = value[0]; // 子数组和初值
for(i=0;i<n;i++) // 原数组元素遍历
{
for(j=i;j<i+m&&j<n;j++) // 构成元素个数不大于m的子数组
{
sum = 0;
for(k=i;k<j;k++) // j-i个元素子数组求和
sum += value[k];
if(sum>ans) // 取子数组和的最大值并记录该子数组的讫止位
{
startid = i;
endid = j - 1;
ans = sum;
}
}
}
cout << "子数组最大和="<<ans<<endl;
cout<<"最大和子数组讫始位置:"<<startid<<" 结束位置:"<<endid<<endl;
for(i=startid;i<endid;i++) cout<<value[i]<<",";
delete []value;
cin>>i; // 只是暂停
}
求解n个元素数组不大于m个元素的子数组的最大和算法之一
最新推荐文章于 2022-04-16 11:24:50 发布