Baekjoon/DP
[백준 2167] 2차원 배열의 합 (DP) (C/C++) (★★)
워니-
2020. 5. 28. 03:15
#include <iostream> #include <algorithm> #include <math.h> #include <algorithm> using namespace std; int N, M, K; int arr[310][310]; long long dp[310][310]; int startX, startY; int endX, endY; int main(void) { // freopen("B2167_input.txt", "r", stdin); cin >> N >> M; for(int i = 1; i <= N; i++) { for(int j = 1; j <= M; j++) { cin >> arr[i][j]; } } // 미리 구해놓기 for(int i = 1; i <= N; i++) { for(int j = 1; j <= M; j++) { dp[i][j] = dp[i-1][j] + dp[i][j-1] + arr[i][j] - dp[i-1][j-1]; } } cin >> K; for(int i = 1; i <= K; i++) { cin >> startX >> startY >> endX >> endY; // 좌표가 사각형 기준 오른쪽위, 왼쪽 아래인 경우 -> 왼쪽 위, 오른쪽 아래로 좌표 수정 int sx = min(startX, endX); int sy = min(startY, endY); int ex = max(startX, endX); int ey = max(startY, endY); cout << dp[ex][ey] - dp[sx-1][ey] - dp[ex][sy-1] + dp[sx-1][sy-1] << endl; } return 0; } | cs |