`

poj 1050 求和问题

 
阅读更多

题意:给定一个n*n的矩阵,求一个子矩阵,使得该矩阵的元素之和最大。

思路:经典的DP。由一维到二维。

      1.必须先了解一维的情况,对于一维的数组而言,则转化为用DP求最大连续子序列,DP的状态方程为:sum[i] = max(sum[i-1] + num[i], 0)。

      例如: num[]: -5, 7, -2, -6, 5, -1, 4

             sum[]:  0, 7, 5, 0, 5,  4,  8

      2.对于二维的情况,则可转化为一维。将子矩阵的所有相同列的元素加在一起,问题就解决了。

      例如: 若子矩阵为: -1, -2, -3,  5,  4

                          2, -5,  4,  7,  6

                          5,  5, -6, -2, -7

              则now[]为: 6,  3, -5, 10, -3

代码:

#include<iostream>
using namespace std;
const int Max = 105;

int max(int a, int b)
{
    return a > b ? a : b;
}

int main()
{
    int n, i, j, k, row, col, sum, ans;
    int num[Max][Max], now[Max];
    cin >> n;
    row = col = n;
    for(i = 0; i < row; i ++)
        for(j = 0; j < col; j ++)
            cin >> num[i][j];
		ans = sum = 0;
		for(i = 0; i < row; i ++)
		{
			memset(now, 0, sizeof(now));
			for(j = i; j < row; j ++)    //  求第i行到第j行的子矩阵。
				for(k = 0, sum = 0; k < col; k ++)
				{ 
					now[k] += num[j][k];
					sum = max(sum + now[k], 0);
					if(sum > ans) 
						ans = sum;
	
				}
		}
		cout << ans << endl;
		return 0;
}

 

 

 

分享到:
评论

相关推荐

    poj 百练 题目分类

    在 POJ 百练 题目分类中,简单计算类题目包括鸡兔同笼(2750)、棋盘上的距离(1657)、校门外的树(2808)、填词(2801)、装箱问题(1017)、平均年龄(2714)、数字求和(2796)、两倍(2807)、肿瘤面积(2713)...

    acm训练计划(poj的题)

    - (poj2528, poj2828, poj2777, poj2886, poj2750):一种高效的数据结构,用于区间求和等操作。 2. **分块**: - (poj2482, poj2352):将数据分为多个区块,提高查询效率。 3. **树套树**: - (poj1195, poj...

    poj题目代码

    10. poj_1744.c - "Array Division":可能需要处理数组的分割和求和问题,对于理解和优化循环及数组操作有帮助。 每一道POJ题目都是一个独特的编程挑战,它们不仅锻炼了作者的编程技巧,也提供了学习各种算法和数据...

    树状数组练习:POJ 2481(JAVA)

    【标题】"树状数组练习:POJ 2481(JAVA)" 是一篇关于使用树状数组(也称为线段树)解决编程竞赛问题的文章。这篇文章可能详细讲解了如何运用这种数据结构来解决特定的问题POJ 2481。POJ(Programming Online Judge)...

    poj1005.zip_北大poj1005

    7. **位操作**:在解决空间效率问题时,位操作经常被用到,如快速求和、集合操作、编码等。 8. **递归与分治**:如快速幂运算、归并排序、分治法解约瑟夫问题等。 9. **贪心算法**:适用于部分最优解的问题,如...

    poj1990.rar_POJ 19_poj_poj19

    对于POJ 1990题目,我们需要解决的问题可能涉及到对某一区间进行快速求和或者更新操作,而树状数组正好可以满足这种需求。 题目描述虽然简短,但隐藏了对数据结构和算法的深度理解要求。"2个树状数组"的提示意味着...

    poj部分水题代码

    - **输入格式**:输入一个正整数 \( n \),表示求和项数。 - **处理逻辑**: - 使用循环计算 \( e \) 的近似值,即 \( e \approx 1 + \frac{1}{1!} + \frac{1}{2!} + \ldots + \frac{1}{n!} \)。 - **输出格式**:...

    ACM-POJ 算法训练指南

    1. **数列和级数**:数列求和、级数收敛性分析(poj1286, poj2409, poj3270, poj1026)。 2. **数学归纳法**:通过归纳推理解决问题(poj2947, poj1487, poj2065, poj1166, poj1222)。 3. **GCD算法**:最大公约数...

    线段树练习POJ 3264

    在本题“POJ 3264”中,我们可能面临的是一个区间最值或者区间求和的计算任务。线段树的基本思想是将数组或序列分成多个部分(通常是二分),每个部分对应线段树的一个节点,通过节点间的合并操作,快速获取区间信息...

    二维树状数组练习 POJ 2029

    在POJ 2029这个题目中,我们可能面临的问题是需要对一个二维矩阵进行动态更新和求和查询,例如计算某一个矩形区域内的元素总和。 二维树状数组的基本思想是将二维空间转化为一维存储,通常是通过行优先或列优先的...

    POJ3094-Quicksum

    【标题】"POJ3094-Quicksum" 是北京大学在线编程平台POJ上的一道题目,这道题目主要考察的是快速求和算法。快速求和,顾名思义,是在较短的时间内计算一系列数字之和的技术,通常与高效的数据结构和算法设计有关。 ...

    图的深搜+树状数组练习 POJ 3321(JAVA)

    树状数组通常用于解决求和、计数或找到某个范围内的最大值、最小值等问题。 在POJ 3321这个题目中,可能要求参赛者使用DFS来遍历图,结合树状数组来解决特定的问题。具体问题内容因没有提供详细描述而未知,但可以...

    POJ1845-Sumdiv

    【标签】"POJ 1845 Sumdiv"中的"POJ"是比赛平台的标识,"1845"是题目在平台上的编号,"Sumdiv"是题目名称的英文缩写,可能指的是求和与除法相关的数学问题。 【压缩包子文件的文件名称列表】: 1. "POJ1845-Sumdiv....

    西工大POJ作业答案

    13. 该题是关于数学序列的求和问题,利用了循环、取模运算和指数运算,求解一个特定的无穷级数。 14. 题目要求找出一个范围内所有素数,并按顺序打印出来。这里用到了循环、平方根计算以及素数检测(试除法)。 15...

    POJ3468.zip_poj3468

    树状数组,又称二叉索引树(Binary Indexed Tree, BIT),是一种用于快速查询和更新数组区间元素的方法,特别适合处理区间求和以及对数组元素进行批量加法操作的问题。这种数据结构可以达到O(logN)的时间复杂度,...

    ACM编程 北大网 poj1004

    2. **累加求和**:遍历数组,将所有元素的值累加到变量`b`中。 3. **计算平均值**:在所有数据读取完毕后,用总和`b`除以数组长度12,得到平均值。 4. **格式化输出**:最后,使用`cout`语句,以“$”开头,输出保留...

    二维树状数组学习之二:练习POJ 1195

    在本篇中,我们将深入学习二维树状数组的应用,并通过解决POJ 1195问题来实践这一概念。 POJ 1195题目要求我们计算一个二维矩阵中的子矩阵之和。这正是二维树状数组的优势所在,因为我们可以快速地对矩阵的任意矩形...

    树状数组练习:POJ 3067

    通过理解和掌握树状数组,不仅可以解决POJ 3067这类问题,还可以应用于各种需要高效区间查询和修改的场景,例如动态统计、求和等问题。同时,树状数组是算法竞赛和实际编程中常用的工具,对于提升解决问题的能力...

    北大POJ中级-基本算法

    1. **数学问题**:例如,质因数分解、数列求和、模运算等。AC代码可能涉及到数学计算和优化,避免冗余计算,提高效率。 ```cpp // 示例:质因数分解 void prime_factors(int n) { for (int i = 2; i * i ; i++) { ...

    poj模拟题(二分查找)

    在讨论的三道poj模拟题中,都涉及到二分查找的核心思想与实现方法,通过实际的问题场景来加深对二分查找算法的理解与应用。 第一题是Cablemaster(poj1064)。题目描述了一个实际应用问题,需要从一定数量的电缆中...

Global site tag (gtag.js) - Google Analytics