zoukankan      html  css  js  c++  java
  • hdu 1559(简单的dp)最大子矩阵

    题意:就是给你一个mXn的矩阵,然后让你在其中找一个和最大的xXy的矩阵。。。

    思路:我觉得dp就是递推,根据前面的推出后面的,每个矩阵的和我有右下角的点记录:dp[i][j]....

    代码实现:

    #include<stdio.h>
    #include<string.h>
    int a[1001][1001],dp[1001][1001]={0};
    int T,m,n,x,y,i,j,max;
    int nima1(int i)
    {
        int sum=0,j;
        for(j=1;j<=y;j++)
             sum=sum+a[i][j]-a[i-x][j];
        return sum;
    }
    int nima2(int i,int j)
    {
        int sum=0,k;
        for(k=i-x+1;k<=i;k++)
            sum=sum+a[k][j]-a[k][j-y];
        return sum;
    }
    int main()
    {
        scanf("%d",&T);
        while(T--)
        {
           scanf("%d%d%d%d",&m,&n,&x,&y);
           max=-1;
           for(i=1;i<=m;i++)
               for(j=1;j<=n;j++)
               {
                   scanf("%d",&a[i][j]);
                   dp[i][j]=0;
               }
           for(i=1;i<=x;i++)
               for(j=1;j<=y;j++)
                   dp[x][y]+=a[i][j];
           if(max<dp[x][y])
               max=dp[x][y];
           for(i=x+1;i<=m;i++)
           {
               dp[i][y]=dp[i-1][y]+nima1(i);
               if(max<dp[i][y])
                   max=dp[i][y];
           }
           for(i=x;i<=m;i++)
               for(j=y+1;j<=n;j++)
               {
                   dp[i][j]=dp[i][j-1]+nima2(i,j);
                   if(dp[i][j]>max)
                       max=dp[i][j];
               }
           printf("%d\n",max);
        }
        return 0;
    }
  • 相关阅读:
    231. Power of Two
    204. Count Primes
    205. Isomorphic Strings
    203. Remove Linked List Elements
    179. Largest Number
    922. Sort Array By Parity II
    350. Intersection of Two Arrays II
    242. Valid Anagram
    164. Maximum Gap
    147. Insertion Sort List
  • 原文地址:https://www.cnblogs.com/jiangjing/p/2964253.html
Copyright © 2011-2022 走看看