-
[백준 11660] 구간 합 구하기 5백준/DP 2023. 6. 30. 19:25
기말끝나고 개오랜만에 백준을...
구간합은 dp로 가능함. 따로 dp배열 만들어놓고 기존 배열에 들어올때마다 해당 칸 dp도 최신화 시켜주면 됨
N이 최대 1024니까 dp까지 해주면 1024*1024
구해야하는 횟수 M 최대가 100,000이니까
백만 몇번 == 1초안에 충분히 돌릴 수 있다.
#include <iostream> #define SIZE 1025 using namespace std; int arr[SIZE][SIZE], dp[SIZE][SIZE]; int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int N, M; cin >> N >> M; for (int i = 1; i <= N; i++) { for (int k = 1; k <= N; k++) { cin >> arr[i][k]; dp[i][k] = dp[i - 1][k] + dp[i][k - 1] - dp[i - 1][k - 1] + arr[i][k]; } } int x1, y1, x2, y2; for (int i = 0; i < M; i++) { cin >> x1 >> y1 >> x2 >> y2; cout << dp[x2][y2] - dp[x2][y1 - 1] - dp[x1 - 1][y2] + dp[x1 - 1][y1 - 1] << "\n"; } return 0; }
'백준 > DP' 카테고리의 다른 글
[백준 12865] 평범한 배낭 (01 배낭문제) (0) 2024.02.17 [백준 2579] 계단 오르기 (0) 2024.02.08 [백준 1010] 다리놓기 (nCr문제) (0) 2024.02.07 [백준 12847] 꿀 아르바이트 (0) 2023.07.05 [백준 10971] 외판원 순회2 (0) 2023.03.10