반응형

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

 

2056번: 작업

수행해야 할 작업 N개 (3 ≤ N ≤ 10000)가 있다. 각각의 작업마다 걸리는 시간(1 ≤ 시간 ≤ 100)이 정수로 주어진다. 몇몇 작업들 사이에는 선행 관계라는 게 있어서, 어떤 작업을 수행하기 위해

www.acmicpc.net

 

 

[ 문제풀이 ]

 

1. 각 작업이 끝나는 시간을 저장할 cost 배열을 만듭니다.

 

2. 선행 작업이 모두 자신보다 숫자가 작은 작업이므로 앞에서 진행된 작업 중 가장 늦게 끝난 작업에 해당 작업이 끝나는데 걸리는 시간을 더해 cost에 저장해줍니다.

 

3. cost 배열에서 가장 큰 값을 출력합니다.

 

[ 소스코드 ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include<iostream>
#include<vector>
 
using namespace std;
 
int N;
int cost[10001];
int ans;
 
int main()
{
    scanf("%d"&N);
 
    for (int i = 1; i <= N; i++) {
        int c, n;
        scanf("%d %d"&c, &n);
        if (n == 0) cost[i] = c;
        for (int j = 0; j < n; j++) {
            int task;
            scanf("%d"&task);
            cost[i] = max(cost[i], cost[task] + c);
        }
        ans = max(ans, cost[i]);
    }
 
    printf("%d", ans);
}
cs
반응형

+ Recent posts