[BOJ 11660]区間と5(Python)を求めます
質問する
区間と5を求めます
問題の説明
N<=1024,M<=10000の制限条件なので、フルナビゲーションを使用すると
M*N^2の時間の複雑さは、当然タイムアウトします.
したがって,DPを用いて解く必要があり,DPは2次元リストを用いる.
DP[i][j]は、(0,0)からiとjの和を求めることで値を入力する.
下図に示すように、緑色の部分を取得する必要がある場合は、DP表から黄色の部分を2つ削除し、赤色の部分は共通の部分なので、もう一度行う必要があります.
プールコード
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
graph = []
dp = [[0] * (n + 1) for _ in range(n + 1)]
for _ in range(n):
graph.append(list(map(int, input().rstrip().split())))
# dp 채우기
for i in range(1, n + 1):
for j in range(1, n + 1):
dp[i][j] = graph[i - 1][j - 1] + dp[i - 1][j] + dp[i][j - 1] - dp[i - 1][j - 1]
for _ in range(m):
x1, y1, x2, y2 = map(int, input().split())
print(dp[x2][y2] - dp[x1 - 1][y2] - dp[x2][y1 - 1] + dp[x1 - 1][y1 - 1])
Reference
この問題について([BOJ 11660]区間と5(Python)を求めます), 我々は、より多くの情報をここで見つけました https://velog.io/@qweadzs/BOJ-11660-구간-합-구하기-5Pythonテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol