题目很简单,就是个最大子矩阵和的裸题,看来算法课本的分析后也差不多会做了。利用最大子段和的O(n)算法,对矩阵的行(或列)进行 i和j的枚举,对于第 i到j行,把同一列的元素进行压缩,得到一整行的一维数组后直接调用O(n)算法即可。我一开始还想着同一列的元素压缩不是也要耗费O(n)的时间吗,看了书上的代码后才知道原来数组b[]的每个元素都可以利用上一次的结果在O(1)时间内算出(当 i固定,j向下枚举时),当 i移动时,b[]就要清零进行重新计算了(在这里很奇怪动态分配的数组竟然不能直接用memset来清零,必须手动开个for循环来清零的,为了先跳过这些细枝末节只好开个全局数组了),代码如下:

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int INF= 0x3fffffff;
int a[][]; int maxSum(int n, int c[]){
int sum= -INF, b=;
for(int i=; i<=n; ++i){
if(b>=) b+= c[i];
else b= c[i];
if(b>sum) sum=b;
}
return sum;
} int b[];
int maxMatrix(int n, int a[][]){
int sum= -INF;
// int *b= new int[n+1];
// printf("%d\n",sizeof(b));
for(int i=; i<=n; ++i){
memset(b,,sizeof(b));
// for(int k=1; k<=n; ++k) b[k]= 0;
for(int j=i; j<=n; ++j){
for(int k=; k<=n; ++k) b[k]+= a[j][k];
sum= max(sum, maxSum(n,b));
}
}
return sum;
} int main(){
int n;
while(~scanf("%d",&n)){
for(int i=; i<=n; ++i)
for(int j=; j<=n; ++j)
scanf("%d",a[i]+j);
printf("%d\n",maxMatrix(n,a));
}
}

hdu 1081(最大子矩阵和)的更多相关文章

  1. hdu 1081(最大子矩阵)

    To The Max Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  2. HDU 1081 To The Max【dp,思维】

    HDU 1081 题意:给定二维矩阵,求数组的子矩阵的元素和最大是多少. 题解:这个相当于求最大连续子序列和的加强版,把一维变成了二维. 先看看一维怎么办的: int getsum() { ; int ...

  3. dp - 最大子矩阵和 - HDU 1081 To The Max

    To The Max Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=1081 Mean: 求N*N数字矩阵的最大子矩阵和. ana ...

  4. hdu 1081 &amp; poj 1050 To The Max(最大和的子矩阵)

    转载请注明出处:http://blog.csdn.net/u012860063 Description Given a two-dimensional array of positive and ne ...

  5. HDU 1081 To the Max 最大子矩阵(动态规划求最大连续子序列和)

    Description Given a two-dimensional array of positive and negative integers, a sub-rectangle is any ...

  6. hdu 1081 dp问题:最大子矩阵和

    题目链接 题意:给你一个n*n矩阵,求这个矩阵的最大子矩阵和 #include<iostream> #include<cstdio> #include<string.h& ...

  7. hdu 1559 最大子矩阵

    最大子矩阵 Time Limit: 30000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  8. 【动态规划】HDU 1081 & XMU 1031 To the Max

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1081 http://acm.xmu.edu.cn/JudgeOnline/problem.php?i ...

  9. (DP)To The Max --HDU -- 1081

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1081 这道题使用到的算法是:预处理+最大连续子串和 如果会做最大连续子串和,那么理解这题就相对简单一些, ...

随机推荐

  1. c#对话框

    OpenFileDialog open = new OpenFileDialog();//创建对话框 open.InitialDirectory = @"C:\Documents and S ...

  2. 使用C#写windows服务

    首先,创建一个windows服务项目

  3. shell脚本中的[]/[[]]区别

    转自:http://www.cnblogs.com/include/archive/2011/12/09/2307905.html 引用: http://www.51testing.com/?uid- ...

  4. httpclient请求方法

    /** * httpclient请求方法 * @param url 请求地址 * @param paramMap 请求参数 * @param ent 编码格式 gbk.utf-8 * @return ...

  5. Easyui Layout Center 全屏方法扩展

    $.extend($.fn.layout.methods, { full : function (jq) { return jq.each(function () { var layout = $(t ...

  6. Android 网格布局短信发送界面

    <?xml version="1.0" encoding="utf-8"?> <GridLayout xmlns:android=" ...

  7. 如何设计点击点击一个div,其他div做出对应反应,以及获取一个节点下的子节点

    <div id="show"> <div>1</div> <div>2</div> <div>3</d ...

  8. 使用source Insight工具创建uboot工程。

    首先在linux下面解压uboot的代码.不能在Windows下面解压,因为Windows的文件名是不区分大小写的. 然后,创建网络驱动器,这样就能在Windows下访问linux的文件夹了.方法:通 ...

  9. firefox渗透师必备的利器

    工欲善必先利其器,firefox一直是各位渗透师必备的利器,小编这里推荐34款firefox渗透测试辅助插件,其中包含渗透测试.信息收集.代理.加密解密等功能. 1:Firebug Firefox的 ...

  10. ajax接收返回值获取不到问题

    function testAsync() { //定义一个全局变量来接受$post的返回值 var result; //用ajax的“同步方式”调用一般处理程序 $.ajax({ url: " ...