๋ฌธ์
https://www.acmicpc.net/problem/2579
๋ฌธ์ ์ดํด
์ ์๊ฐ ์ฐ์ฌ ์๋ ๊ณ๋จ์ ๋ฐ๋ ๊ฒ์์์ ์ป์ ์ ์๋ ์ด ์ ์์ ์ต๋๊ฐ์ ๊ตฌํ๋ค.
๊ณ๋จ ์ค๋ฅด๋ ๊ท์น
- ํ ๋ฒ์ ํ ๊ณ๋จ ๋๋ ๋ ๊ณ๋จ์ฉ ์ค๋ฅผ ์ ์๋ค.
- ์ฐ์๋ ์ธ ๊ณ๋จ์ ๋ฐ์ผ๋ฉด ์ ๋๋ค.
- ๋ง์ง๋ง ๋์ฐฉ ๊ณ๋จ์ ๋ฐ๋์ ๋ฐ์์ผ ํ๋ค.
- ์์์ ์ ๊ณ๋จ์ ํฌํจ๋์ง ์๋๋ค.
๋ฌธ์ ํ์ด
๐ ์ ๊ทผ
๊ฐ ๊ณ๋จ๋ง๋ค ํ์ฌ ๊ณ๋จ๊น์ง์ ์ ์ ์ต๋๊ฐ์ ๊ตฌํด์ ์ ์ฅํ๋ค.
๐ก Dynamic Programming
๊ฐ ๊ณ๋จ์ 1์นธ ๋๋ 2์นธ ์ ๊ณ๋จ์์ ์จ ๊ฒ์ด๋ฏ๋ก max(1์นธ ์ ์ต๋๊ฐ, 2์นธ ์ ์ต๋๊ฐ) + ํ์ฌ ๊ณ๋จ ์ ์๋ก ์์ ์ธ์ธ ์ ์๋ค.
ํ์ง๋ง ์ฐ์ ์ธ ์นธ์ ๋ฐ์ผ๋ฉด ์ ๋๋ ์กฐ๊ฑด์ ๋ง์กฑํ์ง ๋ชปํ๋ค.
์ด ์กฐ๊ฑด์ ๊ณ ๋ คํด์ ๊ฒฝ์ฐ์ ์๋ฅผ ์๊ฐํด๋ณด๋ฉด ์๋์ ๊ฐ์ด ๋ํ๋ผ ์ ์๋ค.
- 2์นธ ์ ์ต๋๊ฐ ์ด์ฉ: ์ฐ์ ์ธ ์นธ ์ ๋ฐ์
- 1์นธ ์ ๊ฐ ์ด์ฉ: 3์นธ ์ →1์นธ ์ ์ ๋ฐ์ ๊ฒฝ์ฐ๋ ์ฐ์ ์ธ ์นธ ์ ๋ฐ์
max(2์นธ ์ ์ต๋๊ฐ, 1์นธ ์ ๊ฐ + 3์นธ ์ ์ต๋๊ฐ) + ํ์ฌ ๊ณ๋จ ์ ์๋ก ์์ ์ธ์ธ ์ ์๋ค.
์ฝ๋
#include <iostream>
#include <vector>
using namespace std;
int maxScore(int n, vector<int> &score)
{
vector<int> dp(n + 1, 0);
dp[1] = score[1];
if (n > 1)
dp[2] = score[1] + score[2];
for (int i = 3; i <= n; i++)
dp[i] = max(dp[i - 2], dp[i - 3] + score[i - 1]) + score[i];
return dp[n];
}
int main()
{
int n;
vector<int> score;
cin >> n;
score.assign(n + 1, 0);
for(int i= 1; i <= n; i++)
cin >> score[i];
cout << maxScore(n, score);
return 0;
}
'๐ญ Problem Solving > C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ][C++] ๋ฐฑ์ค 1303๋ฒ: ์ ์ - ์ ํฌ (0) | 2025.04.23 |
---|---|
[BOJ][C++] ๋ฐฑ์ค 1890๋ฒ: ์ ํ (0) | 2025.04.23 |
[BOJ][C++] ๋ฐฑ์ค 1260๋ฒ: DFS์ BFS (0) | 2025.04.23 |
[BOJ][C++] ๋ฐฑ์ค 2667๋ฒ: ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ (0) | 2024.11.11 |
[BOJ][C++] ๋ฐฑ์ค 3085๋ฒ: ์ฌํ ๊ฒ์ (0) | 2024.10.30 |