https://www.acmicpc.net/problem/4883
๋ฌธ์
์ด ๋ฌธ์ ๋ ์ผ๊ฐ ๊ทธ๋ํ์ ๊ฐ์ฅ ์์ชฝ ๊ฐ์ด๋ฐ ์ ์ ์์ ๊ฐ์ฅ ์๋์ชฝ ๊ฐ์ด๋ฐ ์ ์ ์ผ๋ก ๊ฐ๋ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ๋ฌธ์ ์ด๋ค.
์ผ๊ฐ ๊ทธ๋ํ๋ ์ฌ์ดํด์ด ์๋ ๊ทธ๋ํ๋ก N ≥ 2 ๊ฐ์ ํ๊ณผ 3์ด๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ์ผ๊ฐ ๊ทธ๋ํ๋ ๋ณดํต ๊ทธ๋ํ์ ๋ค๋ฅด๊ฒ ๊ฐ์ ์ด ์๋ ์ ์ ์ ๋น์ฉ์ด ์๋ค. ์ด๋ค ๊ฒฝ๋ก์ ๋น์ฉ์ ๊ทธ ๊ฒฝ๋ก์์ ์ง๋๊ฐ ์ ์ ์ ๋น์ฉ์ ํฉ์ด๋ค.
์ค๋ฅธ์ชฝ ๊ทธ๋ฆผ์ N = 4์ธ ์ผ๊ฐ ๊ทธ๋ํ์ด๊ณ , ๊ฐ์ฅ ์์ชฝ ๊ฐ์ด๋ฐ ์ ์ ์์ ๊ฐ์ฅ ์๋์ชฝ ๊ฐ์ด๋ฐ ์ ์ ์ผ๋ก ๊ฒฝ๋ก ์ค ์๋๋ก๋ง ๊ฐ๋ ๊ฒฝ๋ก์ ๋น์ฉ์ 7+13+3+6 = 29๊ฐ ๋๋ค. ์ผ๊ฐ ๊ทธ๋ํ์ ๊ฐ์ ์ ํญ์ ์ค๋ฅธ์ชฝ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ ํํ๋ก ์ฐ๊ฒฐ๋์ด ์๋ค.
์ ๋ ฅ
์ ๋ ฅ์ ์ฌ๋ฌ ๊ฐ์ ํ ์คํธ ์ผ์ด์ค๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ๊ฐ ํ ์คํธ ์ผ์ด์ค์ ์ฒซ์งธ ์ค์๋ ๊ทธ๋ํ์ ํ์ ๊ฐ์ N์ด ์ฃผ์ด์ง๋ค. (2 ≤ N ≤ 100,000) ๋ค์ N๊ฐ ์ค์๋ ๊ทธ๋ํ์ i๋ฒ์งธ ํ์ ์๋ ์ ์ ์ ๋น์ฉ์ด ์์๋๋ก ์ฃผ์ด์ง๋ค. ๋น์ฉ์ ์ ์์ด๋ฉฐ, ๋น์ฉ์ ์ ๊ณฑ์ 1,000,000๋ณด๋ค ์๋ค.
์ ๋ ฅ์ ๋ง์ง๋ง ์ค์๋ 0์ด ํ๋ ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
๊ฐ ํ ์คํธ ์ผ์ด์ค์ ๋ํด์, ๊ฐ์ฅ ์์ชฝ ๊ฐ์ด๋ฐ ์ ์ ์์ ๊ฐ์ฅ ์๋์ชฝ ๊ฐ์ด๋ฐ ์ ์ ์ผ๋ก ๊ฐ๋ ์ต์ ๋น์ฉ์ ํ ์คํธ ์ผ์ด์ค ๋ฒํธ์ ์๋์ ๊ฐ์ ํ์์ผ๋ก ์ถ๋ ฅํ๋ค.
k. n
k๋ ํ ์คํธ ์ผ์ด์ค ๋ฒํธ, n์ ์ต์ ๋น์ฉ์ด๋ค.
ํ์ด
dp[i][j] = iํ j์ด๊น์ง ๊ฐ๋ ์ต์ ๋น์ฉ
๋น์ฉ์ด!! ์์๊ฐ ๋ ์ ์๋ค!!! ๋ ์ ์!! ์ ์ํ์!!!!! ์์ !!
dp์ ์ฒซ๋ฒ์งธ ์ค(0ํ, dp[0][n])์ ์ด๊น๊ฐ์ ์ ์ ํด์ผํ๋ค
graph[0][0] ์ ์ง๋๊ฐ ์ผ์ด ์์ผ๋ฏ๋ก ๊ทธ๋ฅ ๊ฐ์ฅ ํฐ ๊ฑฐ ๋ฃ์ด์คฌ๋ค
graph[0][2] ๋ฅผ ์ง๋๊ฐ๋ ค๋ฉด ๋ฌด์กฐ๊ฑด graph[0][1]์ ์ง๋๊ฐ์ผ ์ ํจํ๋ฏ๋ก ๋ ์์ ํฉ์ ๋ฃ์ด๋๋ค
// ํ์ด : https://whkakrkr.tistory.com
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int INF = 1000;
int n, ans;
int solution(vector<vector<int>>&graph) {
vector<vector<int>>dp(n, vector<int>(3));
dp[0][0] = INF;
dp[0][1] = graph[0][1];
dp[0][2] = graph[0][1] + graph[0][2];
for(int i=1; i<n; i++) {
dp[i][0] = min({dp[i-1][0], dp[i-1][1]}) + graph[i][0];
dp[i][1] = min({dp[i-1][0], dp[i-1][1], dp[i-1][2], dp[i][0]}) + graph[i][1];
dp[i][2] = min({dp[i-1][1], dp[i-1][2], dp[i][1]}) + graph[i][2];
}
return dp[n-1][1];
}
int main() {
for(int i=1; true; i++) {
cin >> n;
if(n==0) {
break;
}
// ์
๋ ฅ
vector<vector<int>>graph(n, vector<int>(3));
for(int i=0; i<n; i++) {
for(int j=0; j<3; j++) {
cin >> graph[i][j];
}
}
// ํ์ด
ans = solution(graph);
// ์ถ๋ ฅ
cout << i << ". " << ans << "\n";
}
return 0;
}
'๐๏ธ ICPC Sinchon > Dynamic Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ][C++] ๋ฐฑ์ค 2313๋ฒ: ๋ณด์ ๊ตฌ๋งคํ๊ธฐ (0) | 2024.09.23 |
---|---|
[BOJ][C++] ๋ฐฑ์ค 1577๋ฒ: ๋๋ก์ ๊ฐ์ (0) | 2024.09.16 |
[BOJ][C++] ๋ฐฑ์ค 2688๋ฒ: ์ค์ด๋ค์ง ์์ (0) | 2024.09.06 |
[BOJ][C++] ๋ฐฑ์ค 1904๋ฒ: 01ํ์ผ (0) | 2024.08.25 |
[BOJ][C++] ๋ฐฑ์ค 11722๋ฒ: ๊ฐ์ฅ ๊ธด ๊ฐ์ํ๋ ๋ถ๋ถ ์์ด (0) | 2024.08.19 |