您的位置:首页 > 其它

hdu 1081(最大子矩阵)

2013-03-15 11:51 295 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1081

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

View Code

#include<iostream>
const int N=110;
const int inf=1000000000;
using namespace std;

int num

;
int dp
;

int main(){
int n;
while(~scanf("%d",&n)){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
scanf("%d",&num[i][j]);
}
}
int ans=-inf;
for(int i=0;i<n;i++){
memset(dp,0,sizeof(dp));
for(int j=i;j<n;j++){
int sum=-1;
//每列中的元素相加
for(int k=0;k<n;k++){
dp[k]+=num[j][k];
}
//求和最大的那列
for(int k=0;k<n;k++){
sum=sum<0?dp[k]:sum+dp[k];
if(sum>ans)ans=sum;
}
}
}
printf("%d\n",ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: