※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 24430번 문제인 알고리즘 수업 - 행렬 경로 문제 7이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/24430
24430번: 알고리즘 수업 - 행렬 경로 문제 7
첫째 줄에 두 정수를 출력한다. 첫 번째 정수는 출발 원소 (1, 1)에서 출발해서 도착 원소 (n, n)에 도달하는 가장 높은 점수를 의미한다. 두 번째 정수는 가장 높은 점수의 경로에 포함된 중간 원
www.acmicpc.net
(시작칸부터 현재 칸까지의 경로의 점수 최댓값, 중간원소를 거친 횟수)의 순서쌍을 이용하여 다른 행렬경로문제들과 같이 문제를 해결하자.
이 때, 위의 순서쌍의 크기 비교를 할 때 경로의 점수 최댓값을 우선하고, 중간원소를 거친 횟수를 후순위로 비교한다.
아래는 제출한 소스코드이다.
#include <iostream>
#include <vector>
using namespace std;
int arr[1001][1001];
int chk[1001][1001];
pair<int, int> dp[1001][1001];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int N; cin >> N;
for (int r = 1; r <= N; r++) {
for (int c = 1; c <= N; c++) {
cin >> arr[r][c];
}
}
int P; cin >> P;
while (P--) {
int r, c; cin >> r >> c;
chk[r][c] = 1;
}
for (int r = 1; r <= N; r++) {
for (int c = 1; c <= N; c++) {
auto tmp = max(dp[r - 1][c], dp[r][c - 1]);
dp[r][c] = make_pair(tmp.first + arr[r][c], tmp.second + chk[r][c]);
}
}
cout << dp[N][N].first << ' ' << dp[N][N].second;
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 24891 // C++] 단어 마방진 (0) | 2022.04.11 |
---|---|
[BOJ 24418 // C++] 알고리즘 수업 - 행렬 경로 문제 1 (0) | 2022.04.10 |
[BOJ 24427 // C++] 알고리즘 수업 - 행렬 경로 문제 4 (0) | 2022.04.10 |
[BOJ 24860 // C++] Counting Antibodies (0) | 2022.04.10 |
[BOJ 24419 // C++] 알고리즘 수업 - 행렬 경로 문제 2 (0) | 2022.04.10 |