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;
}

浙公网安备 33010602011771号