inflearn logo
강의

Course

Instructor

Coding Test Practice Test (with C++): For Large Companies

5. Efficient study (dynamic programming)

왜 DP로 풀어야하는지 궁금합니다

242

maui2005

8 asked

0

DFS 풀이는 시간초과가 발생하는 이유가 궁금합니다.

DFS 풀이는 시간초과가 발생하기 때문에 DP로 풀어야하는건가요?

이에 대한 설명은 없어서 질문드립니다.

 

 

 

DFS 시간초과 코드는 다음과 같았습니다.

struct Work {
	int s, e;
	int score;
};
int n, m, r;
vector<Work> schedule;
int result = 0;

bool compare(Work a, Work b) {
        return a.s < b.s;
}

void dfs(int now, int start, int score) {
	if (now >= n) {
		result = max(result, score);
		return;
	}
	result = max(result, score);

	for (int i = start; i < m; i++) {
		if (schedule[i].s < now) continue;
		dfs(schedule[i].e + r, i + 1, score + schedule[i].score);
	}
}

int main() {
	cin >> n >> m >> r;
	for (int i = 0; i < m; i++) {
		int s, e, score;
		cin >> s >> e >> score;
		schedule.push_back({ s,e,score });
	}
	sort(schedule.begin(), schedule.end(), compare);
	dfs(0, 0, 0);
	cout << result;
	return 0;
}

질문 C++ 코테 준비 같이 해요!

Answer 1

0

codingcamp

안녕하세요^^

어찌보면 뻔한 말이라서 좀 그렇지만,

DFS는 모든 경우를 다 직접 해봐야 하는 알고리즘이고, 다이나믹은 이미 구해진 해을 이용하 다음 해를 다 해보지 않고 하는 방식이라 그렇습니다.

조합을 구할때 algorithm 함수 next_permutation 사용 가능 여부

0

457

1

최악의 경우 연산 질문이 있습니다.

0

411

1

로컬 환경과 다르게 오답이라고 나와서 문의 드립니다.

0

302

1

6강 3번 정사각형 그리키 코드 질문 드립니다.

0

242

1

1-5 효율적인 공부 dy를 시간(N)으로 하는 풀이 질문

0

320

1

반복수와 시간초 계산을 어떻게 하나요??

0

333

1

선생님 안녕하세요. 다른 풀이에 대한 질문이 있습니다.

0

223

1

문제 해결방법에 대한 질문이 있습니다.

0

245

0

바둑대회 코딩 질문

0

270

1

6분 11초에서 dis [0][][]3차원 격자판이있는데요. 격자판안에 숫자는 문제에 없던데 어떻게 구해지는건가요?

0

200

0

실전모의고사 5회 1번 패턴찾기 질문있습니다.

0

220

1

전역변수관련 질문입니다.

0

255

1

5-1 패턴찾기 문제 질문드립니다.

0

218

1

오렌지 나무 문제 질문드립니다

0

310

1

코드 한번 봐주시면 감사하겠습니다!

0

175

1

코드 한번 봐주시면 감사하겠습니다!

0

234

1

코드 한번 봐주시면 감사하겠습니다!

0

198

1

시작점의 ch

0

204

1

vector에서 질문이 있습니다~!

0

235

1

그대로 따라했는데 시간 초과가 나왔습니다

0

161

1

2회 모의고사 4번 숲속의 기사 코드 질문이 있습니다.

0

288

1

질문있습니다.

0

209

1

이렇게 풀면 반례가 어떻게되나요?

0

245

1

1회 1번 공통 문자열 문제 설명 보충하시면 더 좋을 것 같습니다!

0

221

1