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

 

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

 

11660번: 구간 합 구하기 5

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

www.acmicpc.net


 

 

해결전략

 

Dynamic Programming (DP) 다이나믹 프로그래밍 
누적 합

 

 

 


 

 

코드

 

#include <iostream>
#include <vector>
using namespace std;
int n, m;
int main(){
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> n >> m;
vector<vector<int>>v(n + 1, vector<int>(n + 1));
for (int x=1; x<=n; x++){
for (int y = 1; y <= n; y++) {
cin >> v[x][y];
}
}
vector<vector<int>>dp(n + 1, vector<int>(n + 1));
for(int x = 1; x <= n; x++){
for (int y = 1; y <= n; y++) {
dp[x][y] = dp[x-1][y] + dp[x][y-1] - dp[x-1][y-1] + v[x][y];
}
}
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;
}

 

 


 

유사문제