HDU 1559 最大子矩阵

来源:互联网 发布:南京 网络问政 编辑:程序博客网 时间:2024/05/20 06:30

题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1559


暴力枚举就行了,不过记住上次的和然后在求解会快一些


代码如下:

#include <iostream>#include <cstdio>#include <cstdlib>#include <cmath>#include <cstring>#include <string>#include <algorithm>#include <vector>#include <set>#include <map>#include <queue>using namespace std;/*freopen("input.txt",  "r", stdin);freopen("output.txt", "w", stdout);*/int xh[1010][1010];int dp[1010][1010];int main(){    int i,j,k,n,m,a,b,t,max,temp;    cin>>t;    while(t--)    {        scanf("%d%d%d%d",&n,&m,&a,&b);        for(i=1;i<=n;i++)            for(j=1;j<=m;j++)                scanf("%d",&xh[i][j]);        max=dp[1][1]=0;        for(i=1;i<=a;i++)            for(j=1;j<=b;j++)                dp[1][1]+=xh[i][j];        for(i=1;i<=n-a+1;i++)        {            if(i!=1)            {                temp=0;                for(k=1;k<=b;k++)                    temp+=xh[i+a-1][k]-xh[i-1][k];                dp[i][1]=dp[i-1][1]+temp;                if(max<dp[i][1])                    max=dp[i][1];            }            for(j=2;j<=m-b+1;j++)            {                temp=0;                for(k=i;k<i+a;k++)                    temp+=xh[k][j-1+b]-xh[k][j-1];                dp[i][j]=dp[i][j-1]+temp;                if(max<dp[i][j])                    max=dp[i][j];            }        }        printf("%d\n",max);    }    return 520;}


原创粉丝点击