分析:利用求最大子段和的思想进行求解。

1、首先累加s[i][j]。表示第j列中i从第1行加到第i行的和。

2、对每一列的i1到i2行的和进行计算(0<i1<i2<=n),得出t[k],k表示列值。

3、对t[k]求最大字段和。

4、对全部t[k]求出的最大字段和求最大值,就可以得到最大子矩阵的和。

5、注意:对maxres=0;maxres|=1<<31;的解释。二进制最高位(符号位)置1,其它全部位置0,该数能够变为最小负数,前提为有符号数。

#include<iostream>
using namespace std; int GetMaxNum(int a[],int n) //求最大字段和
{
int i,sum=0,maxsum=0; maxsum|=1<<31;
for(i=1;i<=n;i++)
{
sum+=a[i];
if(sum<a[i])
sum=a[i];
if(maxsum<sum)
maxsum=sum;
}
return maxsum;
} int main()
{
int n,i,j,k,a;
int s[102][102],t[102];
int res,maxres; while(cin>>n)
{
for(i=0;i<=n;i++) //初始化。方便计算
s[i][0]=s[0][i]=0; for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
cin>>a;
s[i][j]=s[i-1][j]+a; //读入时就处理,累加每一列的和,s[i][j]表示第j列中i从第1行加到第i行的和
} maxres=0;
maxres|=1<<31; //maxres二进制最高位(符号位)置1变为负数,变为最小负数
for(i=0;i<n;i++)
for(j=i+1;j<=n;j++)
{
for(k=1;k<=n;k++)
t[k]=s[j][k]-s[i][k]; //t[k]表示第k列中第i行到第j行的和
res=GetMaxNum(t,n);
if(maxres<res)
maxres=res;
}
cout<<maxres<<endl;
}
return 0;
}

HDU ACM 1081 To The Max-&gt;最大子矩阵的更多相关文章

  1. hdu 1081 To The Max(dp+化二维为一维)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1081 To The Max Time Limit: 2000/1000 MS (Java/Others ...

  2. hdu acm 1028 数字拆分Ignatius and the Princess III

    Ignatius and the Princess III Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K ...

  3. ACM HDU 1081 To The Max

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

  4. 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 ...

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

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

  6. Hdu 1081 To The Max

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

  7. URAL 1146 Maximum Sum & HDU 1081 To The Max (DP)

    点我看题目 题意 : 给你一个n*n的矩阵,让你找一个子矩阵要求和最大. 思路 : 这个题都看了好多天了,一直不会做,今天娅楠美女给讲了,要转化成一维的,也就是说每一列存的是前几列的和,也就是说 0 ...

  8. HDU 1081 To The Max(动态规划)

    题目链接 Problem Description Given a two-dimensional array of positive and negative integers, a sub-rect ...

  9. hdu 1081 To The Max(二维压缩的最大连续序列)(最大矩阵和)

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

随机推荐

  1. 如何设置gen_server在退出时执行相关操作

    如果gen_server在监控树中不需要stop函数,gen_server会由其supervisor根据shutdown策略自动终止掉.如果要在进程终止之前执行清理,shutdown策略必须设定一个t ...

  2. Delphi_MemoryModule — load DLL from memory. Also includes hooking utilities.

    https://github.com/Fr0sT-Brutal/Delphi_MemoryModule

  3. YARN & HDFS2 安装和配置Kerberos

    今天尝试在Hadoop 2.x开发集群上配置Kerberos,遇到一些问题,记录一下 设置hadoop security core-site.xml <property> <name ...

  4. 【开源框架EGOTableViewPullRefresh的研究】

    EGOTableViewPullRefresh:点击打开链接https://github.com/enormego/EGOTableViewPullRefresh RootViewController ...

  5. 给刚通过51入门的新人讲讲S12(MCS12XS128)与51的差别

    MCS51是keil也对应地做好了非常多,也就是有非常多对你而言是透明的,是你不必关心的,你所要接触的寄存器数量也非常小,在这个时候你很多其它是写函数,仅仅只是针对这个平台写C程序比在PC上写C控制台 ...

  6. Linux之shell编程基础

    一.变量 变量在shell中分为:本地变量.环境变量.位置参数: 本地变量:仅可在用户当前shell生命期的脚本中使用的变量,本地变量随着shell进程的消亡而无效,本地变量在新启动的shell中依旧 ...

  7. easyui只选择年份月份的插件---SimpleCanleder

    <td>日期</td> <td> <input type="text" id="search_begindate" s ...

  8. cocos2d-x中文显示:加字库

    1.如下:为了中文显示 2.如下:解决方案-加入中文字库

  9. Android项目使用Assets下的文件

    Android项目在编译时,Assets下文件不被编译. Assets下的文件除了 html文件可以直接在项目中使用外,其他的文件都需要做处理滴. 在项目中使用方法:        使用流读取.   ...

  10. haproxy 配置日志

    jrhppt01:/root# vim /etc/haproxy/haproxy.cfg # this config needs haproxy-1.1.28 or haproxy-1.2.1 glo ...