https://www.acmicpc.net/problem/1149
1149๋ฒ: RGB๊ฑฐ๋ฆฌ
์ฒซ์งธ ์ค์ ์ง์ ์ N(2 ≤ N ≤ 1,000)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์๋ ๊ฐ ์ง์ ๋นจ๊ฐ, ์ด๋ก, ํ๋์ผ๋ก ์น ํ๋ ๋น์ฉ์ด 1๋ฒ ์ง๋ถํฐ ํ ์ค์ ํ๋์ฉ ์ฃผ์ด์ง๋ค. ์ง์ ์น ํ๋ ๋น์ฉ์ 1,000๋ณด๋ค ์๊ฑฐ๋
www.acmicpc.net
์ค๋๋ง์ dp ๋ฌธ์ !
๋ฌธ์ ํ๋ฉด์ dp๋ผ๋๊ฑด ์์์ง๋ง,,, ์๊พธ ์ ํ๋ ค์ ๋ค๋ฅธ ๋ถ๋ค ํ์ด๋ฅผ ์ฐธ๊ณ ํ๋ค.
๋ ์ ์ด๋ ๊ฒ ์ด๋ ต์ง ใ ใ ใ
ํ์ด
โ dp ๋ฐฐ์ด์ i๋ฒ์งธ ์ง์ด ๋นจ๊ฐ์์ธ๊ฒฝ์ฐ, ์ด๋ก์์ธ ๊ฒฝ์ฐ, ํ๋์์ธ ๊ฒฝ์ฐ์ ์ต์ ๋์ ๋น์ฉ์ ์ ์ฅํ๋ค.
๐ฅ i๋ฒ์งธ ์ง์ด ๋นจ๊ฐ์์ธ ๊ฒฝ์ฐ
์ต์ ๋์ ๋น์ฉ = (i๋ฒ์งธ ์ง์ ๋นจ๊ฐ์ผ๋ก ์น ํ๋ ๋ฐ ๋๋ ๋น์ฉ ) + min( i-1๋ฒ์งธ ์ง์ด ์ด๋ก์์ธ ๊ฒฝ์ฐ์ ์ต์ ๋์ ๋น์ฉ , i-1๋ฒ์งธ ์ง์ด ํ๋์์ธ ๊ฒฝ์ฐ์ ์ต์ ๋์ ๋น์ฉ)
๐ฅ i๋ฒ์งธ ์ง์ด ์ด๋ก์์ธ ๊ฒฝ์ฐ
์ต์ ๋์ ๋น์ฉ = (i๋ฒ์งธ ์ง์ ์ด๋ก์ผ๋ก ์น ํ๋ ๋ฐ ๋๋ ๋น์ฉ ) + min( i-1๋ฒ์งธ ์ง์ด ๋นจ๊ฐ์์ธ ๊ฒฝ์ฐ์ ์ต์ ๋์ ๋น์ฉ , i-1๋ฒ์งธ ์ง์ด ํ๋์์ธ ๊ฒฝ์ฐ์ ์ต์ ๋์ ๋น์ฉ)
๐ฅ i๋ฒ์งธ ์ง์ด ํ๋์์ธ ๊ฒฝ์ฐ
์ต์ ๋์ ๋น์ฉ = (i๋ฒ์งธ ์ง์ ํ๋์ผ๋ก ์น ํ๋ ๋ฐ ๋๋ ๋น์ฉ ) + min( i-1๋ฒ์งธ ์ง์ด ๋นจ๊ฐ์์ธ ๊ฒฝ์ฐ์ ์ต์ ๋์ ๋น์ฉ , i-1๋ฒ์งธ ์ง์ด ์ด๋ก์์ธ ๊ฒฝ์ฐ์ ์ต์ ๋์ ๋น์ฉ)
โ ์ด๋ ๊ฒ ์ญ์ญ ์ ์ฅํ ๋ค, n๋ฒ์งธ ์ง์ด ๋นจ๊ฐ์, ์ด๋ก์, ํ๋์์ธ ๊ฒฝ์ฐ์ ์ต์ ๋น์ฉ์ ์ถ๋ ฅํ๋ค.
์ ์ถ ์ฝ๋ c++
#include <iostream>
using namespace std;
int dp[3][1000];
int cost[3][1000];
int main(){
int n; cin >> n;
for (int i=0; i<n; i++) cin >> cost[0][i] >> cost[1][i] >> cost[2][i];
dp[0][0] = cost[0][0];
dp[1][0] = cost[1][0];
dp[2][0] = cost[2][0];
for(int i=1; i<n; i++){
dp[0][i] = cost[0][i] + min(dp[1][i-1],dp[2][i-1]);
dp[1][i] = cost[1][i] + min(dp[0][i-1],dp[2][i-1]);
dp[2][i] = cost[2][i] + min(dp[0][i-1],dp[1][i-1]);
}
cout << min(min(dp[0][n-1],dp[1][n-1]),dp[2][n-1]);
return 0;
}
'์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด > DP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค]๋ ๋ฐ๋จน๊ธฐ (0) | 2023.06.10 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] ๋ฉ๋ฆฌ ๋ฐ๊ธฐ (0) | 2023.05.31 |
[๋ฐฑ์ค]14501๋ฒ: ํด์ฌ (0) | 2023.03.23 |
[๋ฐฑ์ค]1932๋ฒ: ์ ์ ์ผ๊ฐํ (0) | 2023.03.11 |
[๋ฐฑ์ค]2579๋ฒ: ๊ณ๋จ ์ค๋ฅด๊ธฐ (0) | 2023.02.28 |