hdu 1081(最大子矩阵)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1081

思路:其实就是化二维为一维,可以把有相同行数的每一列的最大值求出来就可以了,每次都更新就行了。。。

View Code
 1 #include<iostream>
 2 const int N=110;
 3 const int inf=1000000000;
 4 using namespace std;
 5 
 6 int num[N][N];
 7 int dp[N];
 8 
 9 int main(){
10     int n;
11     while(~scanf("%d",&n)){
12         for(int i=0;i<n;i++){
13             for(int j=0;j<n;j++){
14                 scanf("%d",&num[i][j]);
15             }
16         }
17         int ans=-inf;
18         for(int i=0;i<n;i++){
19             memset(dp,0,sizeof(dp));
20             for(int j=i;j<n;j++){
21                 int sum=-1;
22                 //每列中的元素相加
23                 for(int k=0;k<n;k++){
24                     dp[k]+=num[j][k];
25                 }
26                 //求和最大的那列
27                 for(int k=0;k<n;k++){
28                     sum=sum<0?dp[k]:sum+dp[k];
29                     if(sum>ans)ans=sum;
30                 }
31             }
32         }
33         printf("%d\n",ans);
34     }
35     return 0;
36 }
原文地址:https://www.cnblogs.com/wally/p/2961092.html