zoukankan      html  css  js  c++  java
  • POJ-1050 To the Max(最大子矩阵和)

    题意:一个矩阵的大小为(N * N)。求这个矩阵中的最大子矩阵和,(N <= 100)。

    分析:先考虑一维的状况,即(dp[i] = dp[i - 1] < 0 ? val[i] : dp[i - 1] + val[i]),我们可以把从第i行到第j行的每列数加起来,然后变成一维数组,存储在f[]数组中。然后再对这个数组求dp。

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <string>
    #include <cmath>
    #include <algorithm>
    
    using namespace std;
    const int N = 105;
    const int inf = 0x3f3f3f3f;
    int val[N][N];
    int sum[N][N];
    int main()
    {
    	int n;
    	scanf("%d", &n);
    
    	for(int i = 1; i <= n; ++i)
    		for (int j = 1; j <= n; ++j)
    		{
    			scanf("%d", &val[i][j]);
    		}
    
    	int res = -inf;
    	
    	for (int i = 1; i <= n; ++i)
    	{
    		for (int j = i; j <= n; ++j)
    		{
    			int f[N] = { 0 };
    			for (int k = 1; k <= n; ++k)
    			{
    				sum[i][k] += val[j][k];
    
    				f[k] = (f[k - 1] > 0 ? f[k - 1] + sum[i][k] : sum[i][k]);
    				if (f[k] > res)
    				{
    					res = f[k];
    				}
    			}
    		}
    	}
    
    	printf("%d
    ", res);
    
    	return 0;
    }
    
  • 相关阅读:
    大数据内存模型(二级指针)
    多线程函数指针
    返回函数指针的函数
    动态分配二维数组指针
    俄罗斯方块学习笔记
    tailf
    tail
    cut
    split
    paste
  • 原文地址:https://www.cnblogs.com/pixel-Teee/p/13355690.html
Copyright © 2011-2022 走看看