/* get max linear list [x, y)*/ int maxsum(int* A, int x, int y) { if(y - x == 1) { if (A[x] >= 0)return A[x]; else return 0; } int i,m; int max1, max2, L, R; int sum; m = x + (y-x)/2; max1 = maxsum(A, x, m); max2 = maxsum(A, m, y); max1 = max1 > max2 ? max1 : max2; L = 0; sum = 0; for(i = m - 1; i >= x; i--) { sum += A[i]; if (L < sum) L = sum; } sum = 0; R = 0; for(i = m; i < y; i++) { sum += A[i]; if ( R < sum) R = sum; } max1 = max1 > (L+R) ? max1: (L+R); return max1; }
int main(){ int ar[] = {8,15,3,7}; std::cout << "max:\t" << maxsum(ar,4) << std::endl; int ar1[] = {1,3,19,6,8,2}; std::cout << "max:\t" << maxsum(ar1,6) << std::endl; return 0; }
void maxsum(BTREE T, int result, int max[], int index){ if(T == NULL) return; result+= T->element; if((T->left == NULL)&&(T->right == NULL)){ max[index++] = result; } maxsum(T->left, result, max, index); maxsum(T->right, result, max, index); }
int maxsum(TreeNode* root, int& res){ if(root == NULL) return 0; int left = maxsum(root->left, res); int right = maxsum(root->right, res); if(left < 0) left = 0; if(right < 0) right = 0; if((left + right + root->val) > res) res = left + right + root->val; return max(left, right) + root->val; }
int maxPathSum(TreeNode* root) { int res = 0x80000000; maxsum(root, res); return res; }
int maxsum(int A[],int x,int y) { int v,L,R,maxs,i; if(y-x==1) return A[x]; int m=x+(y-x)/2; maxs=max(maxsum(A,x,m),maxsum(A,m,y)); v=0; L=A[m-1]; for(i=m-1; i>=x; i--) { v+=A[i]; L=max(L,v); } v=0; R=A[m]; for(i=m; i<y; i++) { v+=A[i]; R=max(R,v); } return max(maxs,L+R); }
int main() { elem_t matrix[MAXN][MAXN]; int n; int i,j; scanf("%d",&n); for( i = 0; i < n; i++ ) for( j = 0; j < n; j++ ) scanf("%d",&matrix[i][j]); printf("%d\n",maxsum(n,n,matrix)); return 0; }
int main() { int cases=0,casedone=0; int n,k; long *array = (long*)malloc(sizeof(long)*n); fscanf(stdin,"%d %d",&n,&k); int i =0; while(casedone < n) { fscanf(stdin,"%ld",&array[casedone]); casedone++; } printf("%ld",maxsum(n,k,array)); }
int main(int argc, char** argv) { int m; while(scanf("%d", &m) == 1) { int i; for(i = 0; i<m; i++)scanf("%d", &buff[i]); int max = maxsum(buff, 0, m); printf("%d\n", max); } return 0; }
main(){ int n,i,j,k,max,sum,tmp[101],t; scanf("%d",&t); while(t--){ scanf("%d",&n); max=-2147483646; for(i=1;i<=n;i++) for(j=1;j<=n;j++) scanf("%d",&map[i][j]),dp[i][j]=0; for(i=1;i<=n;i++) for(j=1;j<=n;j++) dp[i][j]=dp[i-1][j]+map[i][j]; for(i=1;i<=n;i++) for(j=i;j<=n;j++){ for(k=1;k<=n;k++) tmp[k-1]=dp[j][k]-dp[i-1][k]; max>?=maxsum(n,tmp); for(k=1;k<=n;k++) tmp[k-1]=dp[n][k]-tmp[k-1]; max>?=maxsum(n,tmp); } printf("%d\n",max); } }
int get_max(BTREE T){ int max[len] = {0}; int index = 0, tmp = 0; maxsum(T, 0, max, index); for(index=0; index<len; index++){ if(tmp < max[index]) tmp = max[index]; } return tmp; }
int maxSubArray(int A[],int n) { return maxsum(A,0,n); }