uva10827

题目的意思就是上一题矩阵求最大子矩阵的变形,这个矩阵头和尾是相连的,左边和右边是相连的。

和上一题做法是一样的,把矩阵复制三次,变成四倍大小就行。

需要的是

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值