[OpenJudge-NOI]最大子矩陣 貪心
阿新 • • 發佈:2018-12-24
程式碼
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int g[200][200],cur[200][200][100];
int n;
void Pretreatment() {
for(int k=0;k<n;k++)
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
for(int z=i;z<=j;z++){
cur[i][j][k]+=g[z][k];
}
}
}
}
int Max_Sum(int i,int j){
int s=0,sum=0;
for(int k=0;k<n;k++){
if(s>0){
s+=cur[i][j][k];
}else{
s=cur[i][j][k];
}
if(s>sum){
sum=s;
}
}
return sum;
}
int main() {
memset(cur,0,sizeof(cur));
scanf("%d" ,&n);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
scanf("%d",&g[i][j]);
}
}
/* for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
printf("%d ",g[i][j]);
}
printf("\n");
}*/
Pretreatment();
int maxx(0);
for (int i=0;i<n;i++){
for(int j=0;j<n;j++){
int c=Max_Sum(i,j);
if(c>maxx){
maxx=c;
}
}
}
cout<<maxx<<endl;
}