[๋ฐฑ์ค(BOJ)] 2156๋ฒ: ํฌ๋์ฃผ ์์ (Dynamic Programming, C++)
i-1๋ฒ์งธ ๋ง์๋ ๊ฒฝ์ฐ: DP[i] = G[i] + G[i-1] + DP[i-3]
i-1๋ฒ์งธ ์ ๋ง์๋ ๊ฒฝ์ฐ: DP[i] = G[i] + DP[i-2]
DP[i] = DP[i-1]
์ต์ข DP[i]๋ i๋ฒ์งธ ๋ง์๋ ๊ฒฝ์ฐ์ DP[i]์ i๋ฒ์งธ ์ ๋ง์๋ ๊ฒฝ์ฐ์ DP[i-1]์์ max๋ก ์ ์ฅํ๋ค.
DP[0], DP][1] ์ด๊ธฐ๊ฐ์ ๊ตฌํด์ค์ผ ํ๋ค.
#include <stdio.h>
#include <algorithm>
using namespace std;
int main(){
int n;
scanf("%d", &n);
int G[n] = {0};
int DP[n] = {0};
for(int i=0; i<n; i++) scanf("%d", &G[i]);
for(int i=0; i<2; i++){
if(i==0) DP[i] = G[i];
else DP[i] = G[i] + G[i-1];
}
for(int i=2; i<n; i++){
DP[i] = max(G[i] + G[i-1] + DP[i-3], G[i] + DP[i-2]);
DP[i] = max(DP[i-1], DP[i]);
}
printf("%d", DP[n-1]);
}