๐ค๋ฌธ์ ์ดํด
๊ฐ์ ์์ด ์ฐ์์ผ๋ก ๋์ค์ง ์๊ฒ ์น ํ์ ๋ ๋น์ฉ์ด ๊ฐ์ฅ ์ ๊ฒ ๋๋ ๊ฒฝ์ฐ์ ๋น์ฉ์ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค.
๐ฅํ์ด๐ฅ
์ ์ ํ์ด๋ณธ๊ฒ ๊ธฐ์ต์ด ๋์ ๋ฐ๋ก DP๋ฅผ ์ด์ฉํด ํ์๋ค.
dp[i][j]์์ i๋ ์ง์ ๋ฒํธ, j๋ ์์ ์๋ฏธํ๋ค.
dp[i][0]์ 0์ ์น ํ์ ๋ ๊ทธ ์ ์ง์์ ์น ํ ์ ์๋ ๊ฒฝ์ฐ๋ 1๊ณผ 2์ด๋ฏ๋ก dp[i-1][1]๊ณผ dp[i-1][2]๋ฅผ ๋น๊ตํด ๋ ์์ ๊ฐ๊ณผ i๋ฒ์งธ ์ง์ 0์ผ๋ก ์น ํ์ ๋์ ๋น์ฉ๊ณผ ํฉํด dp[i][0]์ ์ ๋ฐ์ดํธ ํด์ค๋ค.
์๊น 1๊ณผ 2๋ ๋์ผํ๊ฒ ํด์ฃผ๊ฒ ๋๋ฉด ๋ง์ง๋ง ์ง์์ ์์ 0์ ์น ํ์ ๋ vs 1์ ์น ํ์ ๋ vs 2๋ฅผ ์น ํ์ ๋๋ฅผ ๋น๊ตํด ๊ทธ ์ต์๊ฐ์ ์ถ๋ ฅํด์ค๋ค.
#include <iostream>
#include <vector>
using namespace std;
int n;
vector<vector<int>> dp;
int main() {
cin.tie(nullptr);
cout.tie(nullptr);
ios::sync_with_stdio(false);
cin >> n;
dp.resize(n + 2);
int x;
for (int i = 1; i <= n; i++) {
for (int j = 0; j < 3; j++) {
cin >> x;
dp[i].push_back(x);
}
}
for (int i = 2; i <= n; i++) {
dp[i][0] = min(dp[i - 1][1], dp[i - 1][2]) + dp[i][0];
dp[i][1] = min(dp[i - 1][0], dp[i - 1][2]) + dp[i][1];
dp[i][2] = min(dp[i - 1][0], dp[i - 1][1]) + dp[i][2];
}
int min_cost = dp[n][0];
for (int i = 1; i < 3; i++) {
if (min_cost > dp[n][i]) min_cost = dp[n][i];
}
cout << min_cost;
}
728x90
'๋ฐฑ์ค > C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/C++] 1939๋ฒ ์ค๋์ ํ (0) | 2022.07.18 |
---|---|
[๋ฐฑ์ค/C++] 14716๋ฒ ํ์๋ง (0) | 2022.07.16 |
[๋ฐฑ์ค/C++] 18352 ํน์ ๊ฑฐ๋ฆฌ์ ๋์ ์ฐพ๊ธฐ (0) | 2022.07.16 |
[๋ฐฑ์ค/C++] 2234๋ฒ ์ฑ๊ณฝ (0) | 2022.07.16 |
[๋ฐฑ์ค/C++] 2252๋ฒ ์ค ์ธ์ฐ๊ธฐ (0) | 2022.07.16 |