10827
O^3的死活写不对,不知道为什么,算了一下发现O^4也不会超时,就改成O^4的了,不过这个比那个应该要慢得多
//============================================================================ // Name : 10827.cpp // Author : // Version : // Copyright : Your copyright notice // Description : Hello World in C++, Ansi-style //============================================================================ #include <iostream> #include <cstdio> #include <cstring> using namespace std; int in[200][200], a[200][200], d[200][200]; int t, N, n, ans, tag; int main() { freopen("a.txt", "r", stdin); scanf("%d", &N); while(N--){ memset(in, 0, sizeof(in)); memset(a, 0, sizeof(a)); memset(d, 0, sizeof(d)); scanf("%d", &n); tag = 0; for(int i = 1;i <= n;i++){ for(int j = 1;j <= n;j++){ scanf("%d", &in[i][j]); if(in[i][j] >= 0) tag = 1; in[i][j+n] = in[i][j]; in[i+n][j] = in[i][j]; in[i+n][j+n] = in[i][j]; } } if(tag == 0){ ans = in[1][1]; for(int i = 1;i <= n;i++){ for(int j = 1;j <= n;j++){ if(ans < in[i][j]) ans = in[i][j]; } } printf("%d\n", ans); continue; } for(int i = 1;i <= 2*n;i++){ for(int j = 1;j <= 2*n;j++){ a[i][j] = a[i][j-1]+in[i][j]; d[i][j] = d[i-1][j]+a[i][j]; } } ans = d[1][1]; for(int i = 1;i <= n;i++){ for(int j = 1;j <= n;j++){ for(int k = 1;k <= n;k++){ for(int g = 1;g <= n;g++){ t = d[i+k-1][j+g-1]+d[i-1][j-1]-d[i+k-1][j-1]-d[i-1][j+g-1]; if(ans < t) ans = t; } } } } // for(int i = 1;i <= 2*n;i++){ // for(int j = 1;j <= 2*n;j++){ // b[i][j] = b[i-1][j]+in[i][j]; // } // } // ans = 0; // for(int i = 1;i <= n;i++){ // for(int j = 1;j <= n;j++){ // t = 0; // for(int k = 1;k <= n;k++){ // t += (a[k][i+j-1]-a[k][i-1]); // if(t < 0) t = 0; // else{ // if(ans < t) // ans = t; // } // } // t = 0; // for(int k = 1;k <= n;k++){ // t += (b[i+j-1][k]-b[i-1][k]); // if(t < 0) t = 0; // else{ // if(ans < t) // ans = t; // } // } // } // } printf("%d\n", ans); } return 0; }