hdu--1081--最大子矩阵和

一般 做这题之前应该先去做下 hdu的1003----这是 一维上的 最大连续和

矩阵么 就是二维了嘛~

我一开始 走进了个错误的方向... 我去计算了第X行前Y个数的和...这是不对的

我们这里也同样用到了 前缀和的思想 但应该去计算前X个行第Y个数的和

这样 假如 有个matrix[j][y] - matrix[i-1][y]就是表示 第I行到第J行Y列上的和

如果 这个y我们用 0 ->n去遍历它 并且可以通过sum+=matrix[a][b] 来判断到第某行可以使和尽量最大

一共是需要O(n^3)的时间复杂度 去遍历整个矩阵 判断每个子矩阵的和 来求得最大的值

似乎没有更优化的了...   要是可以变成 一维的复杂度 那太好了

    touch me

 

 1 #include <iostream>
 2 using namespace std;
 3 
 4 const int size = 110;
 5 int matrix[size][size];
 6 
 7 int main()
 8 {
 9     int n , i , j , k;
10     int sum , mmax , temp , num;
11     while( cin>>n )
12     {
13         mmax = -520;
14         for( i = 0 ; i<n ; i++ )
15         {
16             for( j = 0 ; j<n ; j++ )
17             {
18                 cin >> num;
19                 matrix[i][j] = i>0 ? matrix[i-1][j] + num : num;
20             }
21         }
22         for( i = 0 ; i<n ; i++ )    
23         {
24             for( j = i ; j<n ; j++ )
25             {
26                 sum = 0;
27                 for( k = 0 ; k<n ; k++ )
28                 {
29                     if(i>0) 
30                         temp = matrix[j][k] - matrix[i-1][k]; 
31                     else
32                         temp = matrix[j][k];
33                     sum += temp;
34                     if( sum>mmax )
35                         mmax = sum;
36                     if( sum<0 )
37                         sum = 0;        
38                 }
39             }
40         }    
41         cout << mmax << endl;            
42     }
43     return 0;
44 }
45  
View Code

 

转载于:https://www.cnblogs.com/radical/p/3847509.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值