`
linest
  • 浏览: 155656 次
  • 性别: Icon_minigender_1
  • 来自: 内蒙古
社区版块
存档分类
最新评论

ZOJ-1074* 和值最大子矩阵

    博客分类:
  • acm
 
阅读更多
1074:给出一个N*N矩阵,求所有子矩阵中能达到的最大和值。

动态规划。矩阵是二维的,先降维,想象把矩阵压扁成一维数组。数组中每个值是原矩阵一列的和值。然后问题转化成和最大的连续子串问题。

求连续子串最大和值O(n)可解。从头扫描累和,遇负数和值则舍弃。因为负值成了接下来的负担。

求子矩阵要确定起始的行和终止的行。在相同起始行下,列和数组是增量计算的,避免了重复计算。


计算演示。 确定行范围,扩展列。 行向下扩展过程中列只需增量计算。
A B C    A B C    A B C   A B C    A B C
A B C    A B C    A B C   A B C    A B C
A B C    A B C    A B C   A B C    A B C






#include<stdio.h>
#include<memory.h>
#include<iostream>
using namespace std;

int matrix[100][100];
int colsum[100];

//计算连续字串最大和值,O(n)
int findmaxsum(int *p,int N)
{
	int currsum=0;
	int maxsum=p[0];
	for(int i=0;i<N;i++)
	{
		currsum+=p[i];
		if(currsum<0)
			currsum=0;
		else if(currsum>maxsum)
			maxsum=currsum;
	}
	return maxsum;
}

int main()
{	
	

	int N;
	cin>>N;
	for(int i=0;i<N;i++)
		for(int j=0;j<N;j++)
			cin>>matrix[i][j];

	int tmp;
	int max=matrix[0][0];
	
	//起始行
	for(int rs=0;rs<N;rs++)
	{
		//初始化
		memset(colsum,0,100*sizeof(int));
		//终结行
		for(int re=rs;re<N;re++)
		{
			//列值增加,求区域和
			for(int col=0;col<N;col++)
			{
				colsum[col]+=matrix[re][col];
				tmp=findmaxsum(colsum,col+1);
				if(tmp>max)
					max=tmp;
			}
		}
	}

	cout<<max<<endl;
}


分享到:
评论

相关推荐

    ACM算法经典书籍----最全最详细的书籍推荐!

    ### ACM算法经典书籍知识点梳理 #### 一、CLRS - **书名**: *Introduction to ...以上书籍和学习路径为想要深入学习算法的同学提供了丰富的资源,通过系统性地学习这些经典书籍,可以显著提升算法理解和应用的能力。

    在线判断-算法题

    ZOJ (Zhejiang University Online Judge) - **特点**:浙江大学主办的在线编程平台。 - **适用对象**:ACM竞赛选手。 - **优势**:与高校合作紧密,实战经验丰富。 ### 17. CodeChef - **特点**:印度的一家在线...

    线段树题目

    - **POJ 3264**:简单的线段树题目,需要求解区间内的最大值和最小值。这种问题通常只需要在线段树的节点中维护最大值和最小值即可。 - **POJ 1151**:结合了线段树和离散化的技巧来求解矩形面积的并集。这需要对...

    欧拉回路题集

    1. **Strange Country II (ZOJ-3332) 竞赛图** - **题目描述**:在一种特殊的图——竞赛图中寻找哈密顿回路。 - **解题思路**:竞赛图中每个节点的入度和出度都为1,因此可以按照顺序构造哈密顿回路。 - **数据...

    Acm竞赛常用算法与数据结构

    - **浙江大学微软技术俱乐部**和**ZOJ**(在线评测系统)是训练和选拔优秀选手的重要平台。 - **参考书籍**:《C++ Primer》、《C++标准程序库》、《算法导论》、《算法艺术与信息学竞赛》等是深入学习的基础资料...

    acm新手训练方案新手必备

    - **概率统计**:包括期望值计算、概率分布等。 - **示例题目**: - POJ 2635: 概率统计的基础应用 - POJ 3292: 概率统计的高级用法 - POJ 1845: 概率统计的变种问题 - POJ 2115: 概率统计的复杂案例 - **组合...

    ACM练习题库

    - 解决ZOJ等网站上的难题 - 参加各类在线比赛,体验比赛氛围 - 对已解决的题目进行深入分析,探索更优解法 通过以上训练计划,可以在短时间内迅速提高算法和编程能力,更好地应对各种类型的ACM竞赛。

    acm程序设计曾宗根

    - **本机调试步骤**:介绍如何在本地环境中设置和执行调试流程,包括如何设置断点、查看变量值等。 ##### 2.4 在线实验平台 - **浙江大学在线评测系统(ZOJ)**:这是一个常用的在线评测平台,提供了丰富的题目资源...

    acm 资料大全 程序 设计 竞赛 icpc

    - **ACM (Association for Computing Machinery)**:是世界上第一个计算机科学领域的教育和科研机构,同时也是全世界计算机领域影响力最大的非营利性专业学术组织。 - **ICPC (International Collegiate Programming...

    OnlineJudge站点网址

    #### 2.2 Zhejiang University ACM Online Judge (ZOJ) - **网址**: http://acm.zju.edu.cn - **特点**: - 由浙江大学维护,题目难度适中,适合练习ACM竞赛题目。 - 界面简洁,易于上手。 #### 2.3 Sichuan ...

    国际大学生程序设计竞赛指南—ACM程序设计

    - **背景**: ACM International Collegiate Programming Contest (ACM/ICPC) 是由美国计算机协会 (Association for Computing Machinery, ACM) 主办的世界范围内规模最大的大学生程序设计竞赛。 - **目标**: 提升...

    在线online judge

    - **特点**: TOJ题库虽然在数量上不如前两者,但它最大的优势在于界面和题目描述均为中文,非常适合那些英语水平有限的学习者。TOJ吸引了大量高中学生,这些学生的英语能力可能较弱,因此TOJ成为了他们练习和提高的...

    备战ACM资料 DP问题等

    ### 备战ACM资料:DP问题及其他知识点详解 #### ACM概述与背景 ACM (Association for Computing Machinery) 是一个国际计算机科学...此外,参加各类在线编程比赛和团队合作项目也是提高实战经验和技能的重要途径。

    ZOJ全部题目分类(分得很细哦)

    - **1205**: 这类题目可能是对基础数据结构(如数组、链表)的简单操作,例如查找最大值或排序。 **学习目标:** - 熟悉基本语法。 - 学会使用循环、条件语句等基本流程控制。 - 掌握基本的数据类型及其操作方法。 ...

    zoj-cpp.zip_zoj

    总之,"ZOJ-CPP.zip" 提供了一个实践和学习动态规划的好机会,对于想要提升C++编程能力和算法素养的初学者来说,这是一个宝贵的资源。通过反复实践和理解这些解答,不仅能掌握动态规划的精髓,还能提高编程技巧,为...

Global site tag (gtag.js) - Google Analytics