题目很简单,就是个最大子矩阵和的裸题,看来算法课本的分析后也差不多会做了。利用最大子段和的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. android基础小结

    (注:此小结文档在全屏模式下观看效果最佳) 2016年3月1日,正式开始了我的android学习之路. 最最开始的,当然是学习怎样搭载环境了,然而苦逼的我在win10各种坑爹的指引下还是安装了一个星期 ...

  2. YTU 3020: 对称矩阵(数组)

    3020: 对称矩阵(数组) 时间限制: 1 Sec  内存限制: 128 MB 提交: 3  解决: 2 题目描述 已知A和B为两个n*n阶的对称矩阵,输入时,对称矩阵只输入下三角行元素,存入一维数 ...

  3. Y2K Accounting Bug 分类: POJ 2015-06-16 16:55 14人阅读 评论(0) 收藏

    Y2K Accounting Bug Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11222   Accepted: 56 ...

  4. 分组排序SQL

    SELECT * FROM (SELECT columns,ROWNUM AS RN FROM (SELECT DISTINCT columns FROM table WHERE 1=1)) T WH ...

  5. 三种常见设计模式 - Factory

    创建型模型 一.简单工厂模式 靠 if else 或者 select case 等分支去控制不同对象的创建,难以维护 二.工厂方法模式  Factory 实现方式:将创建对象的方法定义成一个接口,通过 ...

  6. HDU(3790),最短路二级标准

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3790 最短路径问题 Time Limit: 2000/1000 MS (Java/Others)    ...

  7. dubbo子模块

    dubbo源码版本:2.5.4 经统计,dubbo一共有36个子模块,子模块如下: ---------------------------------------------------------- ...

  8. U盘安装CentOS7的最终解决方案

    转载自http://www.augsky.com/599.html 终于将CentOS7装上笔记本了,过程无比艰辛,因为我发现网上大家提到的所有U盘安装CentOS7时碰到的问题几乎都被我碰到了,像什 ...

  9. SqlSever基础 datepart 获取一个日期的月份

    镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...

  10. Windows平台安装Redmine2.5.x

    安装准备 下载RubyInstaller和Development Kit,也可以使用RailsFTW,轻松搞定windows下的安装. 下载MySql 下载mysql-connector-c-noin ...