给定一个 nxn 的矩阵,找到一个 mxm 的子矩阵,其中 m=1,使得矩阵 mxm 的所有元素之和最大。矩阵 nxn 的输入可以包含零、正整数和负整数值。

示例
Input:
{{1, 1, 1, 1, 1},
{2, 2, 2, 2, 2},
{3, 3, 3, 3, 3},
{4, 4, 4, 4, 4},
{5, 5, 5, 5, 5} }
Output:
4 4
5 5上面的问题可以通过一个简单的解决方案来解决,我们可以取整个矩阵 NxN,然后找出所有可能的 MxM 矩阵并求出它们的和,然后打印具有最大和的 MxM 矩阵。这种方法很简单,但需要 O(N^2.M^2) 时间复杂度,因此我们尝试找到一种时间复杂度较小的方法。
V5Shop网店系统是上海威博旗下产品之一,一款B to C网上开店软件,适合中小型企业及个人快速构建个性化网上商店。 V5SHOP采用最新的ASP.NET分层技术和AJAX技术,结合微软NET+MSSQL 2005平台运行,并且在开发过程中融入了大量电子商务管理、网络营销和用户体验理念让系统的安全性、稳定性、易用性和实用性都得到了空前的突破,真正达到了只要会打字就能够建设专业水准的电子商务平台。
算法
Start
Step 1 -> Declare Function void matrix(int arr[][size], int k)
IF k>size
Return
Declare int array[size][size]
Loop For int j=0 and j maxsum
Set maxsum = sum
Set pos = &(arr[i][0])
End
Loop For int j=1 and j maxsum
Set maxsum = sum
Set pos = &(arr[i][j])
End
End
End
Loop For int i=0 and i
End
Step 2 -> In main()
Declare int array[size][size] = {{1, 1, 1, 1, 1}, {2, 2, 2, 2, 2}, {3, 3, 3, 3, 3}, {4, 4, 4, 4, 4}, {5, 5, 5, 5, 5}}
Declare int k = 2
Call matrix(array, k)
Stop
示例
#includeusing namespace std; #define size 5 void matrix(int arr[][size], int k){ if (k > size) return; int array[size][size]; for (int j=0; j maxsum){ maxsum = sum; pos = &(arr[i][0]); } for (int j=1; j maxsum){ maxsum = sum; pos = &(arr[i][j]); } } } for (int i=0; i 输出
如果我们运行上面的程序,那么它将生成以下输出
4 4 5 5










