본문 바로가기

개발/백준

[백준] 2056번. 작업 (C++)

문제

https://www.acmicpc.net/problem/2056

 

풀이

dp!

#include <iostream>
#include <map>
using namespace std;

int main()
{
	int N; cin >> N;
	map<int, int>work_time;

	int answer = 0;

	for (int i = 0; i < N; i++)
	{
		int time, prevWorkCount;
		cin >> time >> prevWorkCount;

		work_time[i] = time;
		int max = 0;
		for (int k = 0; k < prevWorkCount; k++)
		{
			int prevWork; cin >> prevWork;
			if (max < work_time[prevWork-1]) { max = work_time[prevWork-1]; }
		}

		work_time[i] += max;
		
		if (answer < work_time[i]) { answer = work_time[i]; }
	}
	cout << answer;
}