首页 > 代码库 > UVA10827 - Maximum sum on a torus
UVA10827 - Maximum sum on a torus
题目链接
题意:给出一个环形矩阵,也就是第一行和最后一行是相连的,第一列和最后一列是相连的,求最大的子矩阵的和
思路:只要将矩阵复制四个,那么就可以按照求一个矩阵内最大子矩阵之和的做法去做,即枚举所有子矩阵的和,更新最大值。要注意在转换后的大矩阵,枚举的子矩阵规格是有范围的。
代码:
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int INF = 0x3f3f3f3f; const int MAXN = 205; int arr[MAXN][MAXN], sum[MAXN]; int n, Max; int deal() { int temp; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { memset(sum, 0, sizeof(sum)); for (int k = i; k < i + n; k++) { temp = 0; for (int l = j; l < j + n; l++) { sum[l] += arr[k][l]; temp += sum[l]; if (Max < temp) Max = temp; } } } } return Max; } int main() { int cas; scanf("%d", &cas); while (cas--) { scanf("%d", &n); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { scanf("%d", &arr[i][j]); arr[i][j + n] = arr[i + n][j] = arr[i + n][j + n] = arr[i][j]; } } Max = -INF; int ans = deal(); printf("%d\n", ans); } return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。