์ฐ๋ฆฌํ์์ ๊ฐ์ฅ ์ด์ฌํ, ๋์ ์ํด ์ง์ฅ์ ๋ค๋๋ ํ๋ฅญํ ๋ฐฑ์ค ์ง์์ด ํด์ฌ๋ฅผ ํ๋ ค๊ณ ํ๋ค.
ํด์ฌํ๊ธฐ ์ ๊น์ง ๊ฐ์ฅ ๋ง์ ๋์ ๋ฒ๋ (๊ฐ์ฅ ๋ง์ ์ผ์ ํ๋๊ฒ ์๋) ๊ณํ์ ์ง๊ณ ์ํํ๋ ค ํ๋ค.
๋ฐฑ์ค์ด๊ฐ ๋์ ๋ง์ด ๋ฒ ์ ์๊ฒ ๋์์ฃผ์.
์์ธํ ๋ฌธ์ ์ค๋ช ๊ณผ ์ ํ ์ฌํญ์ ๋ฐฑ์ค ํํ์ด์ง ์ฐธ๊ณ . ๋ฌธ์ ํ๋ฌ๊ฐ๊ธฐ
์ฐ๋ฆฌ ๋ฐฑ์ค์ด๋ N + 1 ์ผ์ ํด์ฌํ๊ธฐ ๋๋ฌธ์ N ์ผ ๊น์ง๋ ์ผ์ ํ๋ค.
์๋ด์๋ฃ์ ๊ฑธ๋ฆฌ๋ ์ผ์๊ฐ 3์ผ์ด๋ฉด ํด๋นํ๋ ๋ ์ ํฌํจํด 3์ผ ์ด๋ผ๋ ๊ฒ์ ๋ช
์ฌํ์.
์ ํ์ ์ธ DFS ๋ฌธ์ ์ด๋ฉฐ ์์ํ๋ ์ผ๋ถํฐ N ์ผ๊น์ง ํ์ ํ, ์ผ๋ง๋ฅผ ๋ฒ์๋์ง ๊ฐ๋ฅํ ์ผ์ด์ค๋ฅผ ๋ชจ๋ ์กฐ์ฌํ๋ ๊ฒ์ด๋ค.
๋ฐฑ์ค ์ฌ์ดํธ๊ฐ ์๋, visual studio ์์ ์ฝ๋๋ฅผ ์์ฑํด์ ๊ทธ๋๋ก ๊ฐ์ ธ์จ ๊ฒ ์ ๋๋ค. ์ผ๋ถ ์ฝ๋์๋ ํ ์คํธ ์ฝ๋๊ฐ ์กด์ฌํฉ๋๋ค.
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
struct Task {
int period;
int earn;
};
using namespace std;
void dfs(int idx, int endDay, int money);
vector<Task> myTask;
int myMoney = -1;
int main() {
int TC;
cin >> TC;
myTask.assign(TC, {0, 0});
for (int i = 0; i < TC; i++)
cin >> myTask[i].period >> myTask[i].earn;
for (int i = 0; i < myTask.size(); i++)
if (myTask[i].period + i <= myTask.size())
dfs(i + 1, i + myTask[i].period, myTask[i].earn);
cout << myMoney;
}
//
void dfs(int idx,int endDay,int money) {
for (int i = idx; i < myTask.size(); i++)
if(endDay <= i && myTask[i].period + i <= myTask.size())
dfs(i + 1, i + myTask[i].period, money + myTask[i].earn);
myMoney = max(myMoney, money);
}
DFS์ ์ ํ์ ์ธ ๋ฌธ์ ๋ก์ ๊ธฐ๋ณธ์ด ๋๋ ๋ฌธ์ ์๋ค.
๋๋ ๋ฌธ์ ๋ฅผ ์๋ชป ์ฝ์ด์ 1์๊ฐ๋์ ์ด์ํ ์ง์ ํ๋ค.
ํด์ฌ๋ฅผ ํ๊ธฐ ์ ๊น์ง ์ด์ฌํ ์ผํ๋ ๋ฐฑ์ค์ด.
๋ฐฑ์ค์ด ์์ฌ๋ ํ๋ฅญํ ๋ถํ๊ฐ ๋๊ฐ๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ์ฌ๊ธฐ๊ฐ ๋ถํธํ ๊ฒ ๊ฐ๋ค.