zoukankan      html  css  js  c++  java
  • POJ1050 To the Max 最大子矩阵

    POJ1050

    给定一个矩阵,求和最大的子矩阵。

    将每一列的值进行累加,枚举起始行和结束行,然后就可以线性优化了 复杂度O(n^3)

    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<cmath>
    #include<vector>
    #include<algorithm>
    using namespace  std;
    const int N=301,M=301;
    const int INF=0x3fffffff;
    int sum[N][M],arr[M];
    int find_max(int a[N][M],int n,int m)
    {
     if(n==0||m==0)return 0;
     int i,j,up,down, ret=-INF;
     memset(sum,0,sizeof(sum));
     for(i=1;i<=n;i++)
     	for(j=1;j<=m;j++)
    	 	sum[i][j]=sum[i-1][j]+a[i][j];
     arr[0]=0;
     for(up=1;up<=n;up++)
     	for(down=up;down<=n;down++)
    	 	{
    	 	 for(i=1;i<=m;i++)
    	 	 	arr[i]=arr[i-1]+(sum[down][i]-sum[up-1][i]);
    	 	 int mini=0;
    	 	 for(i=1;i<=m;i++)
    	 	 	{
    	 	 	 ret=max(ret,arr[i]-mini);
    	 	 	 mini=min(mini,arr[i]);
    			}
    	 	}
     return max(0,ret);		   
    }
    
    
    
    int main()
    {freopen("t.txt","r",stdin);
     int n;
     while(scanf("%d",&n)!=EOF)
     	{
     	 int num[N][M];
     	 for(int i=1;i<=n;i++)
     	 	for(int j=1;j<=n;j++)
     	 		scanf("%d",&num[i][j]);
     	 printf("%d
    ",find_max(num,n,n));
    	}
     return 0;
    }
    

      

  • 相关阅读:
    Debian apt-get 无法补全
    Python 字典排序
    Python 替换字符串
    Debian 7 64位安装 wine
    Python Virtualenv 虚拟环境
    ASP.NET MVC ModelState
    Oracle存储过程写法
    利用ODBC从SQLServer向Oracle中导数据
    web自定义控件UserControl
    工作笔记
  • 原文地址:https://www.cnblogs.com/heisenberg-/p/6895330.html
Copyright © 2011-2022 走看看