hdu 1559 최대 서브 매트릭스

2505 단어 물 문제
최대 서브 매트릭스
Time Limit: 30000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2138    Accepted Submission(s): 1077
Problem Description
m 줄 게.×n 의 정수 행렬, 위 에서 x 를 찾 습 니 다.×y 의 서브 매트릭스, 서브 매트릭스 의 모든 요소 와 최대.
 
Input
데 이 터 를 입력 하 는 첫 번 째 행 위 는 T 조 테스트 데이터 가 있 음 을 나타 내 는 정수 T 입 니 다.각 조 테스트 데이터 의 첫 번 째 행 위 는 네 개의 정수 m, n, x, y (0) 이다.
 
Output
각 그룹의 데이터 에 대해 하나의 정 수 를 출력 하면 서브 매트릭스 의 최대 합 을 나타 낸다.
 
Sample Input
 
   
1 4 5 2 2 3 361 649 676 588 992 762 156 993 169 662 34 638 89 543 525 165 254 809 280
 

Sample Output
 
   
2474
 

Author
lwg
 

Source
HDU 2006-12 Programming Contest
 

Recommend
LL
 一般的朴素算法都会超时。要采用记忆式算法。减少求和次数以提高效率。

#include 
#include

int num[1010][1010];//num   (0,0)(i,j)      
int main()
{
    int t,m,n,x,y,i,j,temp,ans;

    scanf("%d",&t);
    while(t--)
    {
        memset(num,0,sizeof num);
        scanf("%d%d",&m,&n);
        scanf("%d%d",&x,&y);
        for(i=1;i<=m;i++)
        {
            for(j=1;j<=n;j++)
            {
                scanf("%d",&temp);//       
                num[i][j]=num[i-1][j]+num[i][j-1]-num[i-1][j-1]+temp;
            }
        }
        ans=0;
        for(i=x;i<=m;i++)//          。
        {
            for(j=y;j<=n;j++)
            {
                temp=num[i][j]-num[i-x][j]-num[i][j-y]+num[i-x][j-y];//      
                if(ans

좋은 웹페이지 즐겨찾기