- ์ด ๊ธ์ c++๋ก ํ์ด๋ฅผ ์์ฑํ์์ต๋๋ค.
๋ฌธ์
์์
ํ์ด
- DP๋ฅผ ํ์ฉํ์ฌ ํด๊ฒฐํด์ผ ํ๋ ๋ฌธ์ ์
๋๋ค.
- ๊ธฐ์กด์ DP๋ 1์ฐจ์ ์ ํ์์ ์ฌ์ฉํ๋ค๋ฉด, ์ด๋ฒ ๋ฌธ์ ๋ 2์ฐจ์๋ฐฐ์ด์ ์ด์ฉํ ์ ํ์์ ๊ตฌํด์ผ ํฉ๋๋ค. (์ฐ์์ ์ผ๋ก 3๊ฐ์ ๊ณ๋จ์ ๋ฐ๋์ง์ ๋ํ ํ๋จ ๋๋ฌธ์)
- D[i][1] : i๋ฒ์งธ ๊ณ๋จ๊น์ง ํฌํจํ์ฌ ์ฐ์๋ ๊ณ๋จ ์๊ฐ 1์ธ ๊ฒฝ์ฐ, ์ฆ D[i-1]์ ๋ฐ์ง ์๊ณ , D[i-2]๋ฅผ ๋ฐ์ ๊ฒฝ์ฐ
- D[i][2] : i๋ฒ์งธ ๊ณ๋จ๊น์ง ํฌํจํ์ฌ ์ฐ์๋ ๊ณ๋จ ์๊ฐ 2์ธ ๊ฒฝ์ฐ, ์ฆ D[i-1]์ ๋ฐ๊ณ D[i]๋ฅผ ์ฐ์์ ์ผ๋ก ๋ฐ์ ๊ฒฝ์ฐ
- ๋ฐ๋ผ์ D[num][1]๊ณผ D[num][2] ์ค์ ์ต๋๊ฐ์ด ๋ต์ด ๋ฉ๋๋ค.
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int vec[350];
int num;
cin>>num;
vec[0] = 0;
for(int i=1;i<=num;i++){
cin>>vec[i];
}
int d[350][3];
d[0][1] = 0;
d[0][2] = 0;
d[1][1] = vec[1];
d[1][2] = 0;
for(int i=2;i<=num;i++){
d[i][1] = max(d[i-2][1] , d[i-2][2])+vec[i];
d[i][2] = d[i-1][1] + vec[i];
}
int result = d[num][1]>d[num][2]?d[num][1]:d[num][2];
cout<<result;
}
- ์ถ๊ฐ๋ก ๊ถ๊ธํ ์ ์ด๋ ์์ ํ ๋ถ๋ถ ์์ผ๋ฉด ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์ธ์.