求数组的最大子数组的穷举法

来源:百度知道 编辑:UC知道 时间:2024/07/02 09:54:21
#define SIZE 6
#include <iostream.h>
typedef struct {
int from;
int to;
int sum;
}SubMatrix[SIZE*(SIZE+1)/2],*subMatrix;

int main(){

SubMatrix SM;

subMatrix p=NULL;

int matrix[SIZE]={-1,4,2,2,5,-10};

for (int i=0;i<SIZE;i++){

for (int j=0;j<=i;j++){

SM[i*(i+1)/2+j].from=j;

SM[i*(i+1)/2+j].to=i;

SM[i*(i+1)/2+j].sum=0;

for(int cursor=j;cursor<=i;cursor++)

SM[i*(i+1)/2+j].sum+=matrix[cursor];

int temp=SM[0].sum;

if(SM[i*(i+1)/2+j].sum>=temp){

temp=SM[i*(i+1)/2+j].sum;

p=&SM[i*(i+1)/2+j];
}

}
}

/* for(int i=0;i<SIZE*(SIZE+1)/2;i++)

cout<<SM[i].sum<<SM[i].from<

#define SIZE 6
#include <iostream.h>
typedef struct {
int from;
int to;
int sum;
}SubMatrix[SIZE*(SIZE+1)/2],*subMatrix;

int main(){

SubMatrix SM;

subMatrix p=NULL;

int temp;

int matrix[SIZE]={-1,4,2,2,5,-10};

for (int i=0;i<SIZE;i++){ // to

for (int j=0;j<=i;j++){ //from

SM[i*(i+1)/2+j].from=j;

SM[i*(i+1)/2+j].to=i;

SM[i*(i+1)/2+j].sum=0;

for(int cursor=j;cursor<=i;cursor++)
SM[i*(i+1)/2+j].sum+=matrix[cursor]; //calc sum

//int temp=SM[0].sum; //wrong, each time only compare to SM[0], not max
if (i==0 && j==0)
temp = SM[0].sum;

if(SM[i*(i+1)/2+j].sum>=temp){

temp=SM[i*(i+1)/2+j].sum;
p=&SM[i*(i+1)/2+j];
temp = SM[i*(i+1)/2+j].sum; //need this
}
}
}