507

#include <iostream> #include <cstdio> using namespace std; int arr[25000]; struct path{ int len,st,en; }; path p; int kadanesAlgo(int rd,int first) { int max_end_here=0,max_so_far=0; int begin=first,length; int finish=0,start=first; for(int i=first;i<rd;i++) { max_end_here+=arr[i]; if(max_end_here<0) { max_end_here=0; begin=i+1; } if(max_end_here>max_so_far) { max_so_far = max_end_here; start=begin; finish=i+1; length=finish-start+1; p.len=length; p.en=finish; p.st=start; } else if(max_end_here==max_so_far) { max_so_far = max_end_here; start=begin;

10667

#include <iostream> using namespace std; int arr[105][105]; int s; int Matsum(int a,int b) { int p; int Line[105]; int max_end_here,max_so_far; for(int i=1;i<=s;i++) { p=0; for(int j=a;j<=b;j++) { p+=arr[j][i]; } Line[i]=p; } max_end_here=0; max_so_far=0; for(int i=1;i<=s;i++) { max_end_here+=Line[i]; if(max_end_here<0) max_end_here=0; if(max_end_here>max_so_far) max_so_far=max_end_here; } return max_so_far; } int main() { int t,mx,m; int b,r1,r2,c1,c2; cin>>t; while(t–) {

10074

#include <iostream> using namespace std; int arr[105][105]; int M,N; int Matsum(int a,int b) { int p,max_end_here=0,max_so_far=0; int Line[105]; for(int i=1;i<=N;i++) { p = 0; for(int j=a;j<=b;j++) { p+=arr[j][i]; } Line[i]=p; } max_end_here=0; max_so_far=0; for(int i=1;i<=N;i++) { max_end_here = max_end_here + Line[i]; if(max_end_here<0) max_end_here = 0; if(max_so_far<max_end_here) max_so_far = max_end_here; } return max_so_far; } int main()

108

#include <stdio.h> int a[100][100]={0}; int N; int Line[100]; int KadaneAlg(); int MatSum(int a,int b); int main() { int p=-100; int Max=-100; while(scanf("%d",&N)==1) { Max=-100; p =-100; for(int i=0;i<N;i++) { for(int j=0;j<N;j++) scanf("%d",&a[i][j]); } for(int k=0;k<N;k++) { for(int l=k;l<N;l++) { p = MatSum(k,l); if(p>Max) Max = p; } } printf("%d\n",Max); } return 0; } int MatSum(int

836

This problem also can be solved using Dynamic Programming. #include <iostream> #include <string> #include <cstring> #include <cstdio> using namespace std; string *str = new string [50]; int N; int kaadanealgo(int a,int b) { int line[50]; int max_end_here=0; int max_so_far=0; for(int i=0;i<N;i++) { line[i] = 0; for(int j=a;j<=b;j++) { if(str[j][i]=='0') line[i]+=-1000000; else line[i]+=(str[j][i]-'0'); } } for(int