• nyoj 104 最大和


    最大和

    时间限制:1000 ms  |  内存限制:65535 KB

    难度:5

    描述

    给定一个由整数组成二维矩阵(r*c),现在需要找出它的一个子矩阵,使得这个子矩阵内的所有元素之和最大,并把这个子矩阵称为最大子矩阵。 
    例子:
    0 -2 -7 0 
    9 2 -6 2 
    -4 1 -4 1 
    -1 8 0 -2 
    其最大子矩阵为:

    9 2 
    -4 1 
    -1 8 
    其元素总和为15 

    输入

    第一行输入一个整数n(0<n<=100),表示有n组测试数据;
    每组测试数据:
    第一行有两个的整数r,c(0<r,c<=100),r、c分别代表矩阵的行和列;
    随后有r行,每行有c个整数;

    输出

    输出矩阵的最大子矩阵的元素之和。

    样例输入

    1

    4 4

    0 -2 -7 0

    9 2 -6 2

    -4 1 -4 1

    -1 8 0 -2

    样例输出

    15

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    int map[105][105];
    int main()
    {
    	int T;
    	scanf("%d",&T);
    	while(T--)
    	{
    		int r,c,i,j,k;
    		scanf("%d%d",&r,&c);
    		for( i=1;i<=r;i++)
    			for( j=0;j<c;j++)
    			{
    				scanf("%d",&map[i][j]);
    				map[i][j]+=map[i-1][j];//转化成一维 
    			}
    		int sum,max;
    		for( i=1,max=map[1][0];i<=r;i++)
    			for( j=i;j<=r;j++)
    				for( k=sum=0;k<c;k++)
    				{
    				
    					int t=map[j][k]-map[i-1][k];
    					sum=(sum>=0?sum:0)+t;
    					max=max<sum?sum:max;
    				} 
    		printf("%d
    ",max);
    	}
    	return 0;
    }        
    

      

  • 相关阅读:
    让 .Net 程序 脱离 .net framework框架 运行的方法 转
    MySpaces性能提高的过程转
    AskNet 内容查询系统 筹备中
    关于自定义表单的一些想法
    Url重写
    show一下我的办公桌
    IronRuby 初览
    微软将终止对SQL2000的支持
    WCF 消息交换 转
    感受刘德华的努力
  • 原文地址:https://www.cnblogs.com/zhangliu/p/7053397.html
Copyright © 2020-2023  润新知