hdu1081-最大子矩阵和(zoj-1074)
2013-07-28 16:37
239 查看
杭电链接:http://acm.hdu.edu.cn/showproblem.php?pid=1081
浙大链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1074
题意就是给你一个矩阵,找出一个子矩阵,这个子矩阵中所有的数的和是所有可能得到的子矩阵中的最大值,输出这个值。
思路就是和最大连续子序列一样,只不过用行压缩,把几行加和看成一行,变成最大子序列。具体方法是用一个二维数组a[i][j],表示这是第j列前i行的和得到所有数据和,然后开始遍历,用3个for循环,一行一行的找(这里的一行表示的是前几行的和),然后一列一列的加,最终就能得到最大和。结合代码看。
AC代码:
浙大链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1074
题意就是给你一个矩阵,找出一个子矩阵,这个子矩阵中所有的数的和是所有可能得到的子矩阵中的最大值,输出这个值。
思路就是和最大连续子序列一样,只不过用行压缩,把几行加和看成一行,变成最大子序列。具体方法是用一个二维数组a[i][j],表示这是第j列前i行的和得到所有数据和,然后开始遍历,用3个for循环,一行一行的找(这里的一行表示的是前几行的和),然后一列一列的加,最终就能得到最大和。结合代码看。
AC代码:
#include<stdio.h> #include<string.h> #define maxn 105 int main() { int a[maxn][maxn]; int n,t; while(scanf("%d",&n)!=EOF) { memset(a,0,sizeof(a)); for(int i=1; i<=n; i++) { for(int j=1; j<=n; j++) { scanf("%d",&t); a[i][j]=a[i-1][j]+t; } } int sum; int m=0; for(int i=1; i<=n; i++) { for(int j=i; j<=n; j++) { sum=0; for(int k=1; k<=n; k++) { t=a[j][k]-a[i-1][k]; sum+=t; if(sum<0)sum=0; if(sum>m)m=sum; } } } printf("%d\n",m); } return 0; }
相关文章推荐
- HDU 1081 To The Max(dp最大子矩阵和)
- 动态规划-最大子矩阵和(ZOJ 1074 TO THE MAX )
- HDU 1081 最大子矩阵和
- hdu-1081 To The Max (最大子矩阵和)
- hdu 1081(最大子矩阵)
- dp - 最大子矩阵和 - HDU 1081 To The Max
- HDU 1081 To The Max(最大子矩阵和)
- ZOJ1074 (最大和子矩阵 DP)
- HDU 1081 To The Max--DP--(最大子矩阵)
- ZOJ 1074 To the Max(DP 最大子矩阵和)
- HDU 1081 To The Max (DP) 扩展最大子列和,求最大子矩阵和
- hdu 1081 最大子矩阵和
- hdu 1081、poj1050 To The Max 最大子矩阵和
- hdu 1081 To The Max(最大子矩阵和,dp)
- HDU 1081(最大子矩阵问题)
- HDU 1081 To The Max(最大子矩阵和)
- HDU 1081 To The Max(最大子矩阵)
- HDU 1081 & POJ 1050 To The Max (最大子矩阵和)
- 最大子矩阵问题hdu 1081
- ZOJ 1074 最大和子矩阵