To the Max
http://poj.org/problem?id=1050
Description
Given a two-dimensional array of positive and negative integers, a sub-rectangle is any contiguous sub-array of size 1*1 or greater located within the whole array. 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.
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 corner:
9 2
-4 1
-1 8
and has a sum of 15.
Input
The input consists of an N * N 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 N^2 integers separated by whitespace (spaces and newlines). These are the N^2 integers of the array, presented in row-major order. That is, all numbers in the first row, left to right, then all numbers in 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].
Output
Output
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
解题思路
本题是典型的动态规划,实际是求矩阵的最大子矩阵(和最大)。这是将序列的连续最大段和问题扩展到二维的一题。
序列的最大连续段和问题思路:
原序列a 0 -2 -7 0 9 2 -6 2
记录 b 0 0 0 0 9 11 5 7
结果为11
将这个问题扩展到二维,则先将选中的几行,逐列相加变为一个一维数组。(如果是一行的情况,则直接使用序列的最大连续段和方法)
多行变为一行时:例如
0 -2 -7 0
9 2 -6 2
-4 1 -4 1
-1 8 0 -2
当i=0, j=2时,则选择0,1,2行
0 -2 -7 0
9 2 -6 2
-4 1 -4 1
a: 5 1 -17 3
b: 5 6 0 3
答案为3
参考
http://blog.csdn.net/jqandjq/article/details/5060283
#include <stdio.h> #include <stdlib.h> int main (int argc, char const* argv[]) { int i, j, k, l, n, ans, sum, max; int a[100][100]; int b[100]; scanf("%d", &n); for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { scanf("%d", &a[i][j]); } } ans = 0; for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { if (i == j) { for (k = 0; k < n; k++) { b[k] = a[i][k]; } } else { for (k = 0; k < n; k++) { b[k] = 0; for (l = i; l <= j; l++) { b[k] += a[l][k]; } } } sum = 0; max = 0; for (k = 0; k < n; k++) { sum += b[k]; if (sum > max) { max = sum; } if (sum < 0) { sum = 0; } } if (max > ans) { ans = max; } } } printf("%d\n", ans); return 0; }
发表评论
-
fhloj1051 投票
2013-07-04 19:42 0投票 源文件: b(.bas/.c/.cpp/.pas) 输 ... -
fhloj1050 足球赛
2013-07-04 19:36 605足球赛 源文件: a(.bas/.c/.cpp/.pas) ... -
fhloj1092 五子棋
2013-07-04 12:01 735五子棋 源文件: gobang(.bas/.c/.cpp/ ... -
fhloj1091 拼单词
2013-07-04 11:53 754拼单词 源文件: words ... -
fhloj1090 21点游戏
2013-07-04 11:44 64221点游戏 源文件: poker(.bas/.c/.cpp ... -
fhloj1089 帮奶奶算帐
2013-07-04 11:17 603帮奶奶算账 源代码:bill.bas/pas 输入文件:bil ... -
hdu1019 gcd和lcm
2012-12-06 15:09 815Least Common Multiple http://a ... -
hdu1021 推理规律
2012-12-06 09:24 938Fibonacci Again http://acm.hdu ... -
hud1008 电梯 迭代模拟计算
2012-12-04 18:24 1043Elevator http://acm.hdu.edu.cn ... -
hdu1001 求和
2012-12-03 22:05 780Sum Problem http://acm.hdu.edu ... -
hdu1000 A+B
2012-12-03 18:37 864A + B Problem http://acm.hdu.e ... -
hdu2035 乘方取余
2012-12-02 18:02 1143人见人爱A^B http://acm.hdu.edu.cn/ ... -
hdu2034 差集
2012-12-02 17:43 862人见人爱A-B http://acm.hdu.edu.cn/ ... -
hdu2033 时间计算
2012-12-02 16:24 909人见人爱A+B http://acm.hdu.edu.cn/ ... -
HDU1003最大连续子序列和
2012-12-01 15:08 1448Max Sum http://acm.hdu.edu.cn/ ... -
hdu2081 字符串拼接
2012-12-01 14:35 865手机短号 http://acm.hdu.edu.cn/sho ... -
poj1163 树型结构动态规划和最大路径
2012-11-30 22:05 1194The Triangle http://poj.org/pr ... -
POJ1579递归函数定义
2012-11-30 21:58 856Function Run Fun http://poj.or ...
相关推荐
poj online judge 1050 最大子矩阵动态规划解决
* 二分图的最大匹配:二分图的最大匹配是指计算二分图的最大匹配的算法,如 poj3041、poj3020。 * 最大流的增广路算法:最大流的增广路算法是指计算图的最大流的算法,如 poj1459、poj3436。 三、数据结构 数据...
* 最小费用最大流:例如 poj2516、poj2516、poj2195。 * 双连通分量:例如 poj2942。 * 强连通分支及其缩点:例如 poj2186。 * 图的割边和割点:例如 poj3352。 * 最小割模型、网络流规约:例如 poj3308。 3. ...
- 最小费用最大流:如`poj2516, poj2195`。 - **数据结构** - 线段树:如`poj2528, poj2828`。 - RMQ(区间查询):如`poj3264, poj3368`。 - 并查集的高级应用:如`poj1703, poj2492`。 - **搜索** - 最优化...
【标题】"POJ.rar_poj java_poj1048" 涉及的知识点主要围绕编程竞赛中的“约瑟夫环”问题,这里是一个加强版,使用Java语言进行解决。 【描述】"POJ1048,加强版的约瑟夫问题 难度中等" 提示我们,这个问题是编程...
包括二分图的最大匹配和KM算法,用于解决资源分配类问题,如poj3041和poj3020。 ### 三、数据结构 #### 字符串处理 如Trie树(前缀树)、KMP算法,用于字符串匹配和索引构建,见poj2513和poj1961。 #### 排序 ...
【标题】"POJ1159-Palindrome" 是北京大学在线编程平台POJ上的一道编程题目。这道题目主要考察的是字符串处理和回文判断的知识点。 【描述】"北大POJ1159-Palindrome 解题报告+AC代码" 暗示了解决这道问题的方法和...
- **解释**:Kuhn-Munkres算法是一种用于求解赋权二分图最大匹配问题的有效方法。 ### 二、数据结构 #### 1. 树 - **例题**:poj1035, poj3080, poj1936 - **解释**:树形数据结构的题目通常涉及树的遍历、查找等...
【标题】"POJ2002-Squares"是一个经典的计算机编程题目,源自北京大学的在线判题系统(POJ,即PKU Online Judge)。这个题目主要涉及到算法设计和实现,尤其是数学和动态规划方面的知识。 【描述】"解题报告+AC代码...
标题中的"jihe.rar_2289_POJ 3714_poj3714_poj3714 Ra_visual c" 提到了一个压缩文件,可能包含有关编程竞赛或算法解决的资源,特别是与POJ(Problem On Judge)平台上的问题3714相关的。"Ra_visual c"可能指的是...
【标题】"POJ1837-Balance"是一个在线编程竞赛题目,源自著名的编程练习平台POJ(Programming Online Judge)。这个题目旨在测试参赛者的算法设计和实现能力,特别是处理平衡问题的技巧。 【描述】"解题报告+AC代码...
- **最大流的增广路算法**:KM算法,如poj1459和poj3436,用于寻找网络中能传输的最大流量。 3. **数据结构**: - **字符串处理**:如poj1035,涉及字符串操作和模式匹配。 - **排序算法**:包括快速排序、归并...
poj 3414解题报告poj 3414解题报告poj 3414解题报告poj 3414解题报告
在POJ题目中,我们可以看到一些经典的算法题目,例如,动态规划的题目,例如,1037 A decorative fence、1050 To the Max、1088 滑雪等。这类题目需要程序员使用动态规划算法来解决问题。 此外,POJ题目还包括一些...
【标题】"POJ3273-Monthly Expense"是一个编程题目,源自北京大学的在线判题系统POJ(Problem Set of Peking University)。这个题目主要考察的是算法设计和问题解决能力,通常在ACM/ICPC(国际大学生程序设计竞赛)...
【标题】"POJ1201-Intervals" 是北京大学在线编程平台POJ上的一道题目,这道题目主要涉及计算机科学中的算法设计与分析,尤其是数据结构和时间复杂度优化方面的知识。 【描述】"北大POJ1201-Intervals 解题报告+AC...
- (poj3041, poj3020):探讨如何在网络中找到最大流的问题,常用算法包括福特-福克森算法等。 6. **匹配算法**: - (poj1459, poj3436):例如匈牙利算法(KM算法),用于解决二分图的最大匹配问题。 ### 三、...
【标题】"POJ1010-STAMPS"是一个编程题目,来源于北京大学的在线判题系统POJ(Problem Set of Peking University),这是一处训练程序员算法技能和编程能力的平台。该题目旨在考察参赛者对动态规划或贪心算法的理解...
poj 1012解题报告poj 1012解题报告poj 1012解题报告poj 1012解题报告