반응형

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



#include <iostream>

#define MAX 301

int N,M,K;

int dp[MAX][MAX];


using namespace std;

void getSum(){

int value;

cin>>N>>M;

for(int i=1;i<=N;i++){

for(int j=1;j<=M;j++){

cin>>value;

dp[i][j]=value + dp[i][j-1] + dp[i-1][j] - dp[i-1][j-1];

}

}

cin>>K;

while(K--){

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])<<endl;

}

}

int main(){

getSum();

return 0;


차근차근 생각하면 어렵지 않은 문제 

어렵다면 그림을 그려보자

dp[i][j]를 구할때 중복되는 값이 있다는 것을 인지한다면 쉽게 풀 수 있다.

반응형

'Algorithm' 카테고리의 다른 글

[Algospot] TRIANGLEPATH 삼각형 위의 최대 경로  (0) 2018.09.17
[BOJ 2698] 인접한 비트의 개수  (0) 2018.09.10
[BOJ 11048] 다리놓기  (0) 2018.09.07
코딩인터뷰  (0) 2018.08.10
깊이 우선 탐색(DFS, Depth First Search)  (0) 2018.08.08

+ Recent posts