์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ผ๊ฐํ์ ํฌ๊ธฐ n(1 ≤ n ≤ 500)์ด ์ฃผ์ด์ง๊ณ , ๋์งธ ์ค๋ถํฐ n+1๋ฒ์งธ ์ค๊น์ง ์ ์ ์ผ๊ฐํ์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ํฉ์ด ์ต๋๊ฐ ๋๋ ๊ฒฝ๋ก์ ์๋ ์์ ํฉ์ ์ถ๋ ฅํ๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ
์ด์ ๋ฌธ์ ์๋ RGB ๊ฑฐ๋ฆฌ ๋ฌธ์ ์ ์ ์ฌํ๋ค.
dp๋ฅผ ์ด์ฉํ ๊ฒ์ด๋ฏ๋ก ์ ํ์, ์ฆ ๊ท์น์ ์ฐพ์๋ด์ผ ํ๋ค.
์ฒซ๋ฒ์งธ ํ์ ๋ฌด์กฐ๊ฑด ์๊ธฐ ์์ ์ ํํ๋ฏ๋ก ์ ์ธ
๋๋ฒ์งธ ํ๋ถํฐ๋
i) ๊ฐ์ฅ ์ข์ธก ์์์ ๊ฒฝ์ฐ ์ด์ ํ์ ๊ฐ์ฅ ์ข์ธก ์์
ii) ๊ฐ์ฅ ์ฐ์ธก ์์์ ๊ฒฝ์ฐ ์ด์ ํ์ ๊ฐ์ฅ ์ฐ์ธก ์์๋ฅผ ๋ฌด์กฐ๊ฑด ํํด์ผ ํ๋ค.
iii) ์ ์กฐ๊ฑด์ ํด๋น๋์ง ์๋ ์์๋ค์ ์ด์ ํ์ ์ข์ธก, ์ฐ์ธก ์์ ์ค ๋ ํฐ ๊ฐ์ ํํด์ผ ํ๋ค.
๋ง๋ก ์ค๋ช ํ์๋ ๋ช ํํ์ง ์์ ํ๋ก ์ค๋ช ํด๋ณด์๋ฉด
1 | ||||||
5 | 7 | |||||
4 | 2 | 5 | ||||
8 | 5 | 4 | 8 |
๊ฐ์ฅ ์ข์ธก ์์์ธ 5, 4, 8์ ๋ฌด์กฐ๊ฑด 1, 5, 4๋ฅผ ํํด์ผ ํ๋ค.
๊ฐ์ฅ ์ฐ์ธก ์์์ธ 7, 5, 8์ ๋ฌด์กฐ๊ฑด 1, 7, 5๋ฅผ ํํด์ผ ํ๋ค.
์ ์กฐ๊ฑด์ ํด๋น๋์ง ์๋ ์์์ธ 2, 5, 4๋
(5์ 7 ์ค ๋ ํฐ ๊ฐ์ธ 7)
(4์ 2 ์ค ๋ ํฐ ๊ฐ์ธ 4)
(2์ 5 ์ค ๋ ํฐ ๊ฐ์ธ 5)
๋ฅผ ํํ๋ฉด ๋๋ ๊ฒ์ด๋ค.
ํ์ง๋ง ์ฃผ์ํ ์ ์ด ์๋ค. ์ ์ค๋ช ์ ์ ๋ ฅ ๊ฐ์ธ ์ผ๊ฐํ์ ๋ํด์ ๊ณ์ฐ์ ํ ๊ฒ์ด๊ณ ์ค์ ๋ก๋ ๋์ ํฉ์ ์ด์ฉํ์ฌ ๊ณ์ฐํด์ผ ํ๋ค.
triangle์ ์ ๋ ฅ ๊ฐ์ ์ ์ฅํ ๋ฐฐ์ด์ด๋ค.
i) dp[i][j] = dp[i-1][j] + triangle[i][j];
ii) dp[i][j] = dp[i-1][j-1] + triangle[i][j];
iii) dp[i][j] = max(dp[i-1][j-1], dp[i-1][j]) + triangle[i][j];
์ ๊ท์น์ผ๋ก ์ ํ์์ ์ ๋ํ๊ณ , ์ด๋ฅผ ํตํด ๋์ ํฉ์ ๊ณ์ฐํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
1 | ||||||
6 | 8 | |||||
10 | 10 | 13 | ||||
18 | 15 | 17 | 21 |
ํด๊ฒฐ ๊ณผ์
์ ํ์์ ์ฝ๋๋ก ๊ตฌํํ๊ณ ๋ง์ง๋ง ํ์์ ์ต๋๊ฐ์ ์ฐพ๋ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ค.
์ต์ข ์ฝ๋๋
#include <iostream>
using namespace std;
int max(int a, int b){
return a > b ? a : b;
}
int main(){
int triangle[500][500];
int dp[500][500];
int n, result;
cin >> n;
for(int i = 0; i < n; i++){
for(int j = 0; j <= i; j++){
cin >> triangle[i][j];
}
}
dp[0][0] = triangle[0][0];
for(int i = 1; i < n; i++){
for(int j = 0; j <= i; j++){
if (j == 0){
dp[i][j] = dp[i-1][j] + triangle[i][j];
}
else if (j == i){
dp[i][j] = dp[i-1][j-1] + triangle[i][j];
}
else{
dp[i][j] = max(dp[i-1][j-1], dp[i-1][j]) + triangle[i][j];
}
}
}
result = dp[n-1][0];
for(int i = 0; i < n; i++){
if (dp[n-1][i] > result){
result = dp[n-1][i];
}
}
cout << result;
}
max ํจ์๋ ๋ ํฐ ๊ฐ์ return ํด์ฃผ๋ ํจ์์ด๋ค.
'โ๏ธ ์ฝํ ์ค๋น > Dynamic Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋์ ๊ณํ๋ฒ 1] [C++] 1463๋ฒ. 1๋ก ๋ง๋ค๊ธฐ (0) | 2021.01.19 |
---|---|
[๋์ ๊ณํ๋ฒ 1] [C++] 2579๋ฒ. ๊ณ๋จ ์ค๋ฅด๊ธฐ (0) | 2021.01.14 |
[๋์ ๊ณํ๋ฒ 1] [C++] 1149๋ฒ. RGB ๊ฑฐ๋ฆฌ (0) | 2021.01.13 |
[๋์ ๊ณํ๋ฒ 1] [C++] 9461๋ฒ. ํ๋๋ฐ ์์ด (0) | 2021.01.13 |
[๋์ ๊ณํ๋ฒ 1] [Python] 1904๋ฒ. 01ํ์ผ (0) | 2021.01.12 |