题目的意思就是上一题矩阵求最大子矩阵的变形,这个矩阵头和尾是相连的,左边和右边是相连的。
和上一题做法是一样的,把矩阵复制三次,变成四倍大小就行。
需要的是
例如5×5。
只能加1 到 5 ,或者2 到1 ,或者3 到2 不能多于5;
AC代码:
#include<iostream>
#include<string.h>
using namespace std;
const int N = 100 * 4;
int n;
int num[N][N];
int temp[N];
int main () {
int c;
cin >> c;
while (c--) {
cin >> n;
for (int i = 0 ; i < n;i++) {
for (int j = 0 ; j < n ;j++ ) {
cin >> num[i][j];
num[i + n][j] = num[i][j];
num[i][j + n] = num[i][j];
num[i + n][j + n] = num[i][j];
}
}
int sum;
int m = 0;
for (int i = 0 ; i < n ;i++) {
memset(temp , 0, sizeof(temp));
for (int l = i ; l < i + n ;l++) {
for(int r = 0 ; r < 2 * n ;r++) {
temp[r] += num[r][l];
}
for (int w = 0 ; w < n ;w++) {
sum = 0;
for (int j = w ; j < w + n ;j++) {
sum += temp[j];
if (sum < 0 ) {
sum = 0;
}
if (sum > m) {
m = sum;
}
}
}
}
}
cout << m <<endl;
}
}