ZOJ 1074 最大子矩阵和
Description
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
Output
Sample Input
4
0 -2 -7 0
9 2 -6 2
-4 1 -4 1
-1 8 0 -2
Sample Output
15 题意:求最大的子矩阵的和 解题思路:通过循环,用b[k]数组储存每列的和,例如当循环到第2行时,b[0]储存的就是5。 5是怎么来的呢?它是0+9+(-4)=5。
b[1]储存的就是1。 -2+2+1=1 这样求出每列的和然后同时找b[k]序列的最大子段和,不断更新最大值,循环完之后,就可以找出最大值了..... 也许这样比较抽象,举个栗子:(这里就不用N行N列的做例子了.....) 2维数组:
1 2 3
-5 6 7
我们先求
第0行 b数组 1 2 3 最大子段和:1+2+3=6 这里可以理解为 这是 1 2 3 这个子矩阵
第1行
b数组 -4 8 10 最大子段和:8+10=18 这里就是 2 3
6 7 这个子矩阵 所以答案就是18 怎么说,思想应该是通过求每列的和,使得它变成一个求最大字段和的问题......... 代码如下:(去掉注释,也许会对理解思路有帮助....)
#include<stdio.h>
#include <limits>
#include<string.h>
using namespace std;
int a[][],b[];
int n,cursum=-,max=numeric_limits<int>::min(); int curmaxsum()
{
int sum=0,cursum=-130;
for(int i=; i<n; i++)
{
sum+=b[i];
if(sum<)
sum=b[i];
if(sum>cursum)
cursum=sum;
}
return cursum;
} int maxsub()
{
for(int i=; i<n; i++)
{
memset(b,,sizeof(b));
for(int j=i; j<n; j++)
{
//printf("\nj=%d\n",j);
for(int k=; k<n; k++)
{
b[k]+=a[j][k];
}
/*for(int k=0; k<n-1; k++)
printf("%d ",b[k]);
printf("%d\n",b[n-1]);*/ curmaxsum();
//printf("cursum=%d\n",cursum);
if(cursum>max)
max=cursum;
// printf("max=%d\n",max);
}
}
return max;
} int main()
{
while(scanf("%d",&n)==)
{
for(int i=; i<n; i++)
for(int j=; j<n; j++)
scanf("%d",&a[i][j]);
// printf("******************************\n\n");
maxsub();
printf("%d\n",max);
}
return ;
}
ZOJ 1074 最大子矩阵和的更多相关文章
- ZOJ 1074 To the Max(DP 最大子矩阵和)
To the Max Time Limit: 2 Seconds Memory Limit: 65536 KB Problem Given a two-dimensional array o ...
- ZOJ 1074 To the Max
原题链接 题目大意:这是一道好题.在<算法导论>这本书里面,有一节是介绍如何求最大子序列的.这道题有点类似,区别是从数组变成了矩阵,求最大子矩阵. 解法:完全没有算法功底的人当然不知道最大 ...
- HDOJ 1081(ZOJ 1074) To The Max(动态规划)
Problem Description Given a two-dimensional array of positive and negative integers, a sub-rectangle ...
- [LeetCode] 1074. 元素和为目标值的子矩阵数量
矩阵前缀和.因为矩阵中可能包含负值,所以这题肯定不会存在什么剪枝,动态规划的可能性.所以这个题也就没什么弯弯绕绕.个人感觉算不上个Hard题目. 最直观的思路就是枚举子矩阵,既枚举矩阵的左上角节点和右 ...
- ZOJ 3367 Counterfeit Money(最大相同子矩阵)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3909 题意:给出两个矩阵A和B,找出最大的相同子矩阵S.输出S的高和 ...
- ZOJ题目分类
ZOJ题目分类初学者题: 1001 1037 1048 1049 1051 1067 1115 1151 1201 1205 1216 1240 1241 1242 1251 1292 1331 13 ...
- ZOJ 刷题记录 (。・ω・)ノ゙(Progress:31/50)
[热烈庆祝ZOJ回归] P1002:简单的DFS #include <cstdio> #include <cstring> #include <algorithm> ...
- ZOJ 1859 Matrix Searching(二维线段树)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1859 Matrix Searching Time Limit: 10 Seco ...
- ACM 中 矩阵数据的预处理 && 求子矩阵元素和问题
我们考虑一个$N\times M$的矩阵数据,若要对矩阵中的部分数据进行读取,比如求某个$a\times b$的子矩阵的元素和,通常我们可以想到$O(ab)$的遍历那个子矩阵,对它的各 ...
随机推荐
- ArcGIS: version not specified. You must call RuntimeManager.Bind before creat
打开program.cs把ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);这句放到Applicatio ...
- Android数据库的使用
学了web好久没继续做,现在做android开发断断续续也近一年了,实习是android,现在毕业了工作也是android,但是对于数据库这块由于最近项目需要就研究了下其常用操作,这篇博客中的观点仅代 ...
- JMS笔记(一)
1.jms概念 Java Message Service为 Java程序提供一种访问企业消息系统的方法,JMS应用由JMS生产者.JMS Provider.JMS消费者构成 1.1. 一条Messag ...
- [转]T4模版引擎之生成数据库实体类
本文转自:http://www.cnblogs.com/lzrabbit/archive/2012/07/18/2597953.html 在通过T4模版引擎之基础入门 对T4有了初步印象后,我们开始实 ...
- hdu 4585 set应用
#include<iostream> #include<algorithm> #include<cstring> #include<cstdio> #i ...
- less-3-混合
混合特性类似于编程语言中的继承.设计好一个样式类,然后再其他样式中直接混合这个样式类,实现样式的继承重用.就像函数一样调用,并且可以传递参数,功能非常强大,实用. less代码: 生成的css代码: ...
- Linux 命令 - scp: 远程文件拷贝
scp 与普通的文件复制命令 cp 类似,而它们之间最大的差别在于 scp 命令的源或目标文件是远程文件. 命令格式 scp [options] [[user@]host1:]file1 ... [[ ...
- Ubuntu系统下常用的新建、删除、拷贝文件命令
我们在Ubuntu系统中安装程序时,经常要在usr目录下新建.拷贝文件,此文件夹在Linux类系统中需要root权限才能访问,因此用常规的鼠标右键菜单操作是无效的,今天分享一下在终端中使用命令新建.拷 ...
- VSFTPD无法上传的解决方法
搭建好FTP之后就没有去测试了,今天去试了一下上传的时候发生错误了,无法上传,提示“553 Could not create file”错误, 上网找了一些资料,发现很多都说是权限和防火墙的问题,但是 ...
- ADO.NET笔记(一)XML导入导出和数据库
数据导出成XML文件 #region 数据导出成XML文件 string sql = "select Id, CallerNumber, TelNum, StartDateTime, End ...