[SWEA]2001ハエ退治


質問元:[SWEA]2001ハエ退治

質問する


nxn配列の数字は、この領域に存在するハエの数を表す.
MxMサイズのハエを撮ってできるだけ多くのハエを殺したい.
ハエの数を求めろ!

せいげんじょうけん


  • Nは5以上15以下である.

  • Mは2以上N以下です.

  • 各領域のハエ数は30以下である.
  • 入力


    第1行目は、試験例の個数Tを与え、以下は各試験例である.
    各テストケースの最初の行にはNとMがあります.
    次のN行には、N x N配列が与えられる.

    しゅつりょく


    試験例tの結果は「#t」であり、スペースであり、正解を印刷する.
    (tはテストケースの番号を表し、1から始まる.)

    コード#コード#

    T = int(input())
    for tc in range(1, T + 1):
        # N : 총 영역 크기, M : 파리채의 크기
        N, M = map(int, input().split())
        num_list = [list(map(int, input().split())) for _ in range(N)]
    
        max_val = 0     # 최댓값을 저장할 변수
    
        # 인덱스를 벗어나지 않도록 범위 지정
        for i in range(N - M + 1):
            for j in range(N - M + 1):
                sum_val = 0     # 파리채 영역 내부의 합을 구할 변수
                # 파리채 크기 만큼 반복하면서 더해줌
                for k in range(M):
                    for q in range(M):
                        sum_val += num_list[k + i][q + j]
                # 최댓값 보다 파리채 영역이 더 크면 최댓값 변수에 저장
                if max_val < sum_val:
                    max_val = sum_val
    
        print(f'#{tc} {max_val}')
    
    
    
    

    解答方法


    ハエのたたきの範囲を設定するのと範囲全体を設定するのは少し混同されています.最初はインデックスエラーが発生しました.全範囲をN-M+1として指定して解き,エラーを解決した.
    ハエたたき領域の周りで和を求め,最大値変数に格納された値と比較して最大値を求める.