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 }

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值