본문 바로가기
🥇Baekjoon Solutions/동적계획법

[C++] 백준 11660번: 구간 합 구하기 5

by 코푸는 개발자 2021. 8. 1.
728x90

https://www.acmicpc.net/problem/11660

 

11660번: 구간 합 구하기 5

첫째 줄에 표의 크기 N과 합을 구해야 하는 횟수 M이 주어진다. (1 ≤ N ≤ 1024, 1 ≤ M ≤ 100,000) 둘째 줄부터 N개의 줄에는 표에 채워져 있는 수가 1행부터 차례대로 주어진다. 다음 M개의 줄에는 네

www.acmicpc.net

최초풀이

시간초과 에러가 많이 발생하는 문제입니다.

DP 알고리즘을 잘활용하고 빠른 입출력 처리도 해주어야 합니다.

#include <iostream>

using namespace std;

int dp[1025][1025];

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int N, M;
	cin >> N >> M;

	for (int i = 1; i <= N; i++) {
		for (int j = 1; j <= N; j++) {
			cin >> dp[i][j];
			dp[i][j] = dp[i-1][j]+dp[i][j-1] - dp[i-1][j-1] +dp[i][j];
		}
	}

	while (M--) {
		int x1, y1, x2, y2;
		cin >> x1 >> y1 >> x2 >> y2;

		cout << dp[x2][y2] - dp[x1 - 1][y2] - dp[x2][y1 - 1] + dp[x1 - 1][y1 - 1] << '\n';
	}

	return 0;
}
728x90

댓글