[๋ฐฑ์ค(BOJ)] 2579๋ฒ: ๊ณ๋จ ์ค๋ฅด๊ธฐ (Dynamic Programming , C++)
BOJ:2156๋ฒ(ํฌ๋์ฃผ ์์) ๋ฌธ์ ๋ฅผ ์ฐธ๊ณ ํด์ ์ ํ์์ ์๊ฐํ๋ค.
A[0] 10
A[1] 20
A[2] 15
A[3] 25
A[4] 10
A[5] 20
์์ ๊ฐ์ด ํ ์คํธ์ผ์ด์ค๊ฐ ์์ ๋, DP[3]๋ถํฐ๋ A[0] + A[1] + A[3]์ ํ๋ ๊ฒฝ์ฐ (DP[i-2] + A[i])์ A[0] + A[2] + A[3] (DP[i-3] + A[i-1] + A[i])๊ฐ ์๊ณ , ๋ ๊ฒฝ์ฐ์์ ๋ ํฐ 55๋ฅผ DP[3]์ ์ ์ฅํ๋ค.
DP[0]: 10
DP[1]: 30
DP[2]: 35
DP[3]: 55
DP[4]: 65
DP[5]: 75
DP๋ ์์ ๊ฐ์ผ๋ฉฐ, ๋ง์ง๋ง์ ํญ์ ํฌํจ๋๋ฏ๋ก DP[n-1]์ ์ถ๋ ฅํ๋ค.
#include <stdio.h>
#include <algorithm>
using namespace std;
int main(){
int n;
scanf("%d", &n);
int A[n] = {};
int DP[n] = {};
for(int i=0; i<n; i++) scanf("%d", &A[i]);
DP[0] = A[0];
DP[1] = max(A[1], A[0] + A[1]);
DP[2] = max(A[1] + A[2], A[0] + A[2]);
for(int i=3; i<n; i++){
DP[i] = max(DP[i-2] + A[i], DP[i-3] + A[i-1] + A[i]);
}
printf("%d", DP[n-1]); // ๋ง์ง๋ง์ ํญ์ ํฌํจ์ด๋ฏ๋ก
}