• 编程之美子矩阵之和的最大值


    把二维转化为一维,再利用求最大子序列的方法求最大子矩阵.

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<assert.h>
    
    #define max(a, b) ((a) > (b) ? (a) : (b))
    
    const int neginf = 0x80000001;
    
    int a[100][100] = {0};
    
    int getMaxSum(int *b, int n)
    {
    	int curSum = 0;
    	int maxSum = neginf;
    	for(int i=0; i<n; i++)
    	{
    		if(curSum < 0)
    			curSum = 0;
    		curSum += b[i];
    		maxSum = max(maxSum, curSum);
    	}
    	return maxSum;
    }
    
    int * getSeqMatrix(int s, int e, int n)
    {
    	int *b = new int[n];
    	for(int i=0; i<n; i++)
    		b[i] = 0;
    	for(i=0; i<n; i++)
    	{
    		for(int j=s; j<=e; j++)
    		{
    			b[i] += a[j][i];
    		}
    	}
    	return b;
    }
    
    int getMaxMatrix(int n)
    {
    	int curSum = 0;
    	int maxSum = neginf;
    	for(int i=0; i<n; i++)
    	{
    		for(int j=i; j<n; j++)
    		{
    			int *b = getSeqMatrix(i, j, n);
    			curSum = getMaxSum(b, n);
    			maxSum = max(curSum, maxSum);
    			delete []b;
    		}
    	}
    	return maxSum;
    }
    
    void test()
    {
    	int n;
    	while(scanf("%d", &n)!=EOF)
    	{
    		if(n == 0) break;
    		for(int i=0; i<n; i++)
    		{
    			for(int j=0; j<n; j++)
    				scanf("%d", &a[i][j]);
    		}
    		int ret = getMaxMatrix(n);
    		printf("%d\n", ret);
    	}
    }
    
    int main()
    {
    	test();
    	return 0;
    }


  • 相关阅读:
    如何修炼成某一领域的高手?
    宝宝为什么见生人就哭
    绩效管理
    《管理3.0》读书笔记
    卡特尔16PF性格测试与答案
    管理3.0
    偶感
    Javascript事件总结
    HTML5中与页面显示相关的API
    毕业了五年了--- 人生感想
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3014172.html
Copyright © 2020-2023  润新知