Uva 507 最大子矩阵和
2016-07-22 09:41
302 查看
A - Maximum Sum
Time Limit:3000MS
Memory Limit:0KB 64bit IO Format:%lld & %llu
Submit
Status
Description
consists of exactly 3 disjuncts. This problem (3-SAT) is NP-complete. The problem 2-SAT is solved quite efficiently, however. In contrast, some problems belong to the same complexity class regardless of the dimensionality of the problem.
with the largest sum is referred to as the maximal sub-rectangle. A sub-rectangle is any contiguous sub-array of size
![](http://7xjob4.com1.z0.glb.clouddn.com/14892420a3c52372ec9ffb95ed3f32c0)
or
greater located within the whole array. As an example, the maximal sub-rectangle of the array:
![](http://7xjob4.com1.z0.glb.clouddn.com/4be89dd465ca1c028044b32396351582)
is in the lower-left-hand corner:
![](http://7xjob4.com1.z0.glb.clouddn.com/bd96b20cb94dd863e4085827349eab54)
and has the sum of 15.
![](http://7xjob4.com1.z0.glb.clouddn.com/4a71bdada9efbe33d34086848b9b46c3)
array
of integers. The input begins with a single positive integer N on a line by itself indicating the size of the square two dimensional array. This is followed by
![](http://7xjob4.com1.z0.glb.clouddn.com/81e8f83cbb723f3880793748b61ecada)
integers
separated by white-space (newlines and spaces). These
![](http://7xjob4.com1.z0.glb.clouddn.com/81e8f83cbb723f3880793748b61ecada)
integers
make up the array in row-major order (i.e., all numbers on the first row, left-to-right, then all numbers on the second row, left-to-right, etc.). N may be as large as 100. The numbers in the array will be in the range [-127, 127].
The output is the sum of the maximal sub-rectangle.
来源: <http://acm.hust.edu.cn/vjudge/contest/view.action?cid=99978>
题意:
最大子矩阵和的问题,期间注意sum的初始化和b的变化,当b>0的时候
b+=a[j];b<=0时 b=a[j];
方法:把i行到j行的上下行的数据相加。应用一维的最大字段和方法。
代码:
相关的知识: http://blog.csdn.net/liufeng_king/article/details/8632430
Time Limit:3000MS
Memory Limit:0KB 64bit IO Format:%lld & %llu
Submit
Status
Description
Background
A problem that is simple to solve in one dimension is often much more difficult to solve in more than one dimension. Consider satisfying a boolean expression in conjunctive normal form in which each conjunctconsists of exactly 3 disjuncts. This problem (3-SAT) is NP-complete. The problem 2-SAT is solved quite efficiently, however. In contrast, some problems belong to the same complexity class regardless of the dimensionality of the problem.
The Problem
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-rectanglewith the largest sum is referred to as the maximal sub-rectangle. A sub-rectangle is any contiguous sub-array of size
or
greater located within the whole array. As an example, the maximal sub-rectangle of the array:
is in the lower-left-hand corner:
and has the sum of 15.
Input and Output
The input consists of anarray
of integers. The input begins with a single positive integer N on a line by itself indicating the size of the square two dimensional array. This is followed by
integers
separated by white-space (newlines and spaces). These
integers
make up the array in row-major order (i.e., all numbers on the first row, left-to-right, then all numbers on the second row, left-to-right, etc.). N may be as large as 100. The numbers in the array will be in the range [-127, 127].
The output is the sum of the maximal sub-rectangle.
Sample Input
4 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2
Sample Output
15
来源: <http://acm.hust.edu.cn/vjudge/contest/view.action?cid=99978>
题意:
最大子矩阵和的问题,期间注意sum的初始化和b的变化,当b>0的时候
b+=a[j];b<=0时 b=a[j];
方法:把i行到j行的上下行的数据相加。应用一维的最大字段和方法。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <stack>
#include <string>
#include <set>
#include <map>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#define MAXX 100+10
#define inf 0x3f3f3f3f
using namespace std;
int maxsum(int *a, int n)
{
int b=0, sum=-2147483645;
for (int i=0; i<n; i++)
{
if (b<0)
b = a[i];
else
b += a[i];
if (b>sum)
sum = b;
}
return sum;
}
int main()
{
#ifdef LOCAL
freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
#endif // LOCAL
int n;
while (scanf("%d", &n)!=EOF)
{
int a[MAXX][MAXX], b[MAXX];
for (int i=0; i<n; i++)
for (int j=0; j<n; j++)
scanf("%d", &a[i][j]);
int ans = -2147483645;
for (int i=0; i<n; i++)
{
memset(b, 0, sizeof(b));
for (int j=i; j<n; j++)
{
for (int k=0; k<n; k++)
b[k] += a[j][k];
int maxx = maxsum(b, n);
if (maxx > ans)
ans = maxx;
}
}
printf("%d\n", ans);
}
return 0;
}
相关的知识: http://blog.csdn.net/liufeng_king/article/details/8632430
相关文章推荐
- 023——hibernate统计查询
- Weex&ReactNative对比
- 正确理解ThreadLocal[转]
- C#中的SqlBulkCopy批量插入数据
- 浅谈Ajax请求与浏览器缓存
- viewpager轮播
- 个人小知识点强化记忆
- postgresql日期计算 laravel模板引擎 数据迁移 2016.07.21回顾
- python网络爬虫抓取图片
- 提高开发效率的Eclipse实用操作
- sscanf函数的用法
- WordPress的统计函数
- UVA 10557 XYZZY(DFS+BFS 与 SPFA 两种做法)
- 导入即可SpingMVC+MyBatis简单权限管理系统,带数据库
- 例题3-6 环状序列 UVa1584
- 设计模式学习笔记(二):观察者模式
- 连载:面向对象葵花宝典:思想、技巧与实践(12) - “继承” 详解
- angularJS图表-angular-flot
- Markdown 简单使用教程
- Spring任务调度<task:scheduled-tasks>【含cron参数详解】