Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- IFileDialog
- RootMotion
- Frustum
- const
- directx
- 팰린드롬 만들기
- UnrealEngine5
- GeeksForGeeks
- DirectX11
- 1563
- baekjoon
- softeer
- 백준
- DeferredRendering
- 티스토리챌린지
- 줄 세우기
- 오블완
- winapi
- UE5
- C++
- 언리얼엔진5
- algorithm
- 프로그래머스
- Unreal Engine5
- Programmers
- C
- NRVO
- UnrealEngine4
- RVO
- 2294
Archives
- Today
- Total
Game Develop
[Algorithm] Baekjoon 11660번 : 구간 합 구하기 5 본문
https://www.acmicpc.net/problem/11660
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
int dp[1025][1025] = { 0 };
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n, m;
int x1, y1, x2, y2;
vector<long long> results;
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];
}
}
for (int i = 0; i < m; i++)
{
cin >> x1 >> y1 >> x2 >> y2; // x가 행, y가 열.
long long result = dp[x2][y2] - dp[x1-1][y2] - dp[x2][y1-1] + dp[x1-1][y1-1];
results.push_back(result);
}
for (auto& temp : results)
{
printf("%lld\n", temp);
}
}
|
cs |
여기에서의 DP는, 만약 x행 y열이 주어진다면 dp[x][y]는 1,1부터 x,y까지의 사각형의 누적합이다.
최종적으로 구해야할 전체 사각형에서의 일부분 사각형을 구하기 위해서는 1,1부터 해당좌표까지의 누적합이 필요하다.
DP테이블만 잘 업데이트 해주면 1,1에서 X,Y까지의 누적합구하는거나, X1,Y1에서 X2,Y2까지의 누적합구하는거나 메인로직은 똑같다.
시작위치가 다를 뿐이다.
이 문제에 대해서 구글링 한다면, 아래와 같은 그림들을 보게 될텐데
여기서 DP테이블의 [x][y]는 사각형들의 중심에있는 점에 위치해있다고 생각하면, 행이나 열에 -1을 해주는 이유를 알 수 있다.
'Algorithm > Baekjoon' 카테고리의 다른 글
[Algorithm]Baekjoon 2096번 :: 내려가기 (0) | 2022.12.06 |
---|---|
[Algorithm]Baekjoon 1916번 :: 최소비용 구하기 (0) | 2022.12.06 |
[Algorithm] Baekjoon 9465번 : 스티커 (0) | 2022.12.05 |
[Algorithm] Baekjoon 1991번 : 트리 순회 (0) | 2022.12.05 |
[Algorithm] Baekjoon 1932번 : 정수 삼각형 (0) | 2022.12.05 |