Problem C:
该问题是问题B的升级版本。
其主要设计思路与问题B相似,基于问题B的程序,我将void Calcu(int &Seq, int &Ccolumn_Sum_Seq,int K)
函数(如下)
void Calcu(int *&Seq, int *&Ccolumn_Sum_Seq,int K)
{
int count = 0;
for (int ccn = 1; ccn <= K; ccn++)//子列中的元素个数
for (int i = 0; i <= K - ccn; i++)//子列首元素位置
{
for (int j = i; j < i + ccn; j++)//遍历子列
Ccolumn_Sum_Seq[count] += Seq[j];
count++;
}
}
之中的for (int ccn = 1; ccn <= K; ccn++)
语句改为了for (int ccn = K; ccn >=1; ccn--)
,这样在之后的扫描选取最大子列时,所选出的子列即为符合要求的最大子列。
以下是C++的程序实现:
#include <iostream>
using namespace std;
void Calcu(int *&Seq, int *&Ccolumn_Sum_Seq, int K)
{
int count = 0;
for (