您的位置:首页 > 其它

hdu 1081(最大子矩阵)

2014-05-26 17:53 183 查看
题目链接: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

;
7 int dp
;
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 }


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: