1 #include <iostream> 2 #include <string.h> 3 #include <string> 4 #include <fstream> 5 #include <algorithm> 6 #include <stdio.h> 7 #include <vector> 8 #include <queue> 9 #include <set> 10 #include <cmath> 11 using namespace std; 12 const double eps = 1e-8; 13 const int INF=0x7fffffff; 14 #define MAXN 76 15 int s[MAXN][MAXN][MAXN]; 16 int a[MAXN][MAXN]; 17 int main() 18 { 19 int n,T; 20 scanf("%d",&T); 21 while(T--) 22 { 23 scanf("%d",&n); 24 memset(s,0,sizeof(s)); 25 for(int i=0;i<n;i++) 26 for(int j=0;j<n;j++) 27 {scanf("%d",&a[i][j]); 28 s[i][j][j]=a[i][j];} 29 for(int x=0;x<n;x++) 30 { 31 for(int y=0;y<n;y++) 32 for(int l=1;l<n;l++) 33 s[x][y][(y+l)%n]=s[x][y][(y+l-1)%n]+a[x][(y+l)%n]; 34 35 } 36 int Max=-INF; 37 int Min=0,ans=0; 38 for(int y1=0;y1<n;y1++) 39 for(int y2=0;y2<n;y2++) 40 { 41 42 for(int x=0;x<n;x++) 43 { ans=0; 44 for(int y=0;y<n;y++) 45 { 46 ans+=s[(x+y)%n][y1][y2]; 47 Max=max(Max,ans); 48 //Min=min(Min,s[x][y1][y2]); 49 } 50 51 } 52 } 53 printf("%d\n",Max); 54 /*cout<<endl; 55 for(int i=0;i<n;i++) 56 { 57 for(int j=0;j<n;j++) 58 cout<<a[i][j]<<' '; 59 cout<<endl; 60 } 61 for(int x=0;x<n;x++) 62 {cout<<x<<endl; 63 for(int y=0;y<n;y++) 64 {for(int l=0;l<n;l++) 65 cout<<s[x][y][(y+l)%n]<<' '; 66 cout<<endl;} 67 }*/ 68 69 } 70 return 0; 71 }
虽然过了 但空间优化不好~ 只需要一个一维数组维护状态即可