关闭

Maximum Sum

标签: acm尺取前缀和
51人阅读 评论(0) 收藏 举报
分类:
链接:http://acm.timus.ru/problem.aspx?space=1&num=1146
题目:
Given a 2-dimensional array of positive and negative integers, find the sub-rectangle with the largest sum. The sum of a rectangle is the sum of all the elements in that rectangle. In this problem the sub-rectangle with the largest sum is referred to as the maximal sub-rectangle. A sub-rectangle is any contiguous sub-array of size 1 × 1 or greater located within the whole array.
As an example, the maximal sub-rectangle of the array:
0 −2 −7 0
9 2 −6 2
−4 1 −4 1
−1 8 0 −2
is in the lower-left-hand corner and has the sum of 15.
题意:给一个数字矩阵,用一个矩形框几个数字,求这几个数字的和的最大值为多少。
分析:这道题用到了很巧妙的前缀和用法+尺取法。用二维数组存数据,存的是本列从头到这一项的和。之后枚举矩形的左右两边,尺取上下两边得到最大值。
题解:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <stack>
#include <vector>
#include <map>
#include <cstring>
#include <functional>
#include <cmath>
using namespace std;


int s[110][110];
int main()
{
	//freopen("in.txt", "r", stdin);
	int n;
	while (~scanf("%d", &n))
	{
		for (int i = 0; i < n; i++)
			for (int j = 0; j < n; j++)
			{
				scanf("%d", &s[i][j]);
				if(j>=1)
					s[i][j] += s[i][j - 1];
			}
		int ans = -10000000;
		
		for (int i = 0; i < n; i++)
			for (int j = i; j < n; j++)
				for (int k = 0, temp = 0; k < n;k++)
				{
					temp += s[k][j] - s[k][i - 1];
					ans = (ans > temp) ? ans : temp;
					if (temp < 0)temp = 0;
				}
		printf("%d\n", ans);
	}
}

0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3108次
    • 积分:597
    • 等级:
    • 排名:千里之外
    • 原创:59篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    友情链接