• POJ 1050 To the Max


    To the Max
    Time Limit: 1000MS   Memory Limit: 10000K
    Total Submissions: 35476   Accepted: 18625

    Description

    Given a two-dimensional array of positive and negative integers, a sub-rectangle is any contiguous sub-array of size 1*1 or greater located within the whole array. The sum of a rectangle is the sum of all the elements in that rectangle. In this problem the sub-rectangle with the largest sum is referred to as the maximal sub-rectangle.  As an example, the maximal sub-rectangle of the array: 
    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

    The input consists of an N * N array of integers. The input begins with a single positive integer N on a line by itself, indicating the size of the square two-dimensional array. This is followed by N^2 integers separated by whitespace (spaces and newlines). These are the N^2 integers of the array, presented in row-major order. That is, all numbers in the first row, left to right, then all numbers in the second row, left to right, etc. N may be as large as 100. The numbers in the array will be in the range [-127,127].

    Output

    Output the sum of the maximal sub-rectangle.

    Sample Input

    4
    0 -2 -7 0 9 2 -6 2
    -4 1 -4  1 -1
    
    8  0 -2

    Sample Output

    15
    代码:
    // 最大连续和扩展
    // 最近DP D到吐血= = 对于新手来说好难想到状态 
    // 还是好好修炼吧= = 
    #include<cstdio>
    #include<cstring>
    using namespace std ;
    #define M 110
    int a[M][M] , d[M] ;
    int n ;
    int Sum()
    {
    	int max = -3724 , i ;
    	int mm = 0 ;
    	for( i = 1; i <= n ;i++)
    	{
    		mm += d[i] ;
    		if( mm > max ) max = mm ;
    		if( mm < 0 ) mm = 0;
    	}
    	return max ;
    }
    int dfs()
    {
    	int i , j , ans = -1213  , cmp ;
    	for( i = 1; i <= n ;i++)
    	{
    		memset( d , 0 , sizeof(d) ) ;
    		for( j = i ; j <= n ;j++)// 枚举行的所以情况
    		{
    			for( int v = 1; v <= n ; v++)
    				d[v] += a[j][v] ;
    			cmp = Sum() ; // 列用 最大连续和处理
    			//printf( "%d\n" , cmp ) ;
    			if( ans < cmp  ) ans = cmp ; 
    		}
    	}
    	return ans ;
    }
    int main()
    {
    	int i , j  ;
    	while( scanf( "%d" , &n) != EOF )
    	{
    		for( i = 1; i <= n ;i++)
    			for( j  = 1 ;j <= n ;j++)
    				scanf( "%d" , &a[i][j] ) ;
    		printf( "%d\n" , dfs( ) ) ;
    	}
    }
    

      

  • 相关阅读:
    修改element ui默认样式
    MyUI是美亚柏科旗下新德汇出品的Web前端一站式项目工程框架。
    细谈 axios和ajax区别
    Window MySQL远程连接不上的解决
    为什么要前后端分离?各有什么优缺点?
    原生js
    node.js安装及环境配置之Windows篇
    IDEA 导入若依管理系统
     Java图形验证码,支持gif、中文、算术等类型,可用于Java Web、JavaSE等项目。
    获取git仓库时更新类型update type 的选择
  • 原文地址:https://www.cnblogs.com/20120125llcai/p/3067923.html
Copyright © 2020-2023  润新知