সোমবার, ৯ এপ্রিল, ২০১২

UVA-108 Maximum sum


#include<cstdio>
#include<iostream>
#include<queue>

#define INF 30000
#define MAX 100

using namespace std;

int main()
{  int array[MAX][MAX];
   int sum[MAX][MAX][MAX];
 while(1){ int N;
           cin>>N;
           if(feof(stdin))break;
         
           priority_queue<int>pq;
           int i,j,k;

           for(i=0;i<N;i++)
               for(j=0;j<N;j++){cin>>array[i][j];          //array input
                                         pq.push(array[i][j]);} //to handle the case of all negative entries

         
            for(i=0;i<N;i++)                         // taking input for column combination sums
               for(j=0;j<N;j++){sum[i][j][j]=array[i][j];
                                           for(k=j+1;k<N;k++)sum[i][j][k]=sum[i][j][k-1]+array[i][k];
                                         }
       
          int Sum,maxsum=-INF;
          for(j=0;j<N;j++)
              for(k=j;k<N;k++){Sum=0;
                                         for(i=0;i<N;i++){Sum+=sum[i][j][k];
                                                                    if(Sum<0){Sum=0;}
                                                                    else if(Sum>=maxsum){maxsum=Sum;}
                                                                  }
                                           }
       
          if(maxsum==-INF)maxsum=pq.top();
          cout<<maxsum<<endl;

  }
  return 0;
}

কোন মন্তব্য নেই:

একটি মন্তব্য পোস্ট করুন