Imperfect Version One
#include <iostream>using namespacestd;/*int Yiwei_max (int n,int a[],int *p,int *q) {int temp=0,sum=-999999999,timer=-1; for (int i=0;i<n;i++) {if (temp>0) {temp+=a[i]; } else {temp=a[i]; } if (temp>sum) {sum=temp; *q=i; timer++; }} *p=*q-timer; return sum; }*/intMax_sum (intNintA[],int*besti,int*Bestj) { int*b = (int*)malloc(n *sizeof(int)); intsum =0; inti =-1; inttemp =0; for(i=0; i<=n-1; i++) { if(Temp >0) {Temp+=A[i]; } Else{Temp=A[i]; } B[i]=temp; } Sum= b[0]; for(i=1; i<=n-1; i++) { if(Sum <B[i]) {Sum=B[i]; *BESTJ =i; } } for(i = *bestj;i >=0; i--) { if(B[i] = =A[i]) { *besti =i; Break; } } Free(b); returnsum;}voidMain () {inta[ -][ -],b[ -]; intup[ -],down[ -],t[ -]; intI,j,m,n,x,y; inttemp,t2; intL=0, u=0, l_down,l_up,n_down,n_up; ints; cout<<"How many rows? "<<Endl; CIN>>m>>N; for(i=0; i<m;i++) { for(j=0; j<n;j++) {cin>>A[i][j]; } } for(i=0; i<m;i++) { for(j=0; j<n;j++) {B[j]=A[i][j]; } //Temp=yiwei_max (n,b,&x,&y);Temp=max_sum (n,b,&x,&y); Up[i]=x; Down[i]=y; T[i]=temp; } T2=t[0]; for(i=0; i+1<m;i++) { if(up[i]<=down[i+1] && down[i]>=up[i+1]) {T2+=t[i+1]; } Else{L_down=Down[i]; L_up=Up[i]; N_up=up[i+1]; N_down=down[i+1]; if(down[i]<up[i+1]) { for(; l_down!=up[i+1];) {L+=a[i][++L_down]; } for(; n_up!=Down[i];) {u+=a[i+1][--N_UP]; } } if(up[i]>down[i+1]) { for(; l_up!=down[i+1];) {L+=a[i][--L_UP]; } for(; n_down!=Up[i];) {u+=a[i+1][++N_down]; }} s=l>u?L:u; if(s+t[i+1]>0) {T2+=t[i+1]+s; } }} cout<<t2<<Endl;}
Two-dimensional array of maximum connectivity and (Unicom coloring problem) beta!