티스토리 뷰

DS\Algo

BOJ 2056 작업

MathTrauma 2022. 10. 6. 15:19

 

문제 링크 : https://www.acmicpc.net/problem/2056

 

2056번: 작업

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

www.acmicpc.net

 

선행 관계가 작업 번호 순으로 주어지니 딱히 전처리할 것들은 없다.

 

dp[i] 는 i 번째 작업을 마칠 수 있는 최소 시간으로 정의한다.

a[i] 를 i 번 작업에 소요되는 시간, Si 를 i 번 작업에 필요한 선행 작업이라 할 때,

다음 관계식이 성립한다.

dp[i]=maxjSidp[j]+a[i] 

#include<bits/stdc++.h>

using namespace std;

vector<vector<int>> info;
vector<int> dp;

int main(){
    int n; scanf("%d",&n);
    dp=vector<int>(n+1);
    info=vector<vector<int>>(n+1);
    
    for(int i=1;i<=n;i++){
        int t; scanf("%d",&t);
        info[i].push_back(t);
        int k; scanf("%d",&k);
        for(int j=0;j<k;j++){
            int c; scanf("%d",&c);
            info[i].push_back(c);
        }
    }
    
    dp[1]=info[1][0];
    for(int i=2;i<=n;i++){
        int x=0;
        for(int j=1;j<info[i].size();j++)
            x=max(x, dp[info[i][j]]);
        dp[i]=x+info[i][0];
    }
    
    int ans=0;
    for(int i=2;i<=n;i++)
        ans=max(ans, dp[i]);
    printf("%d\n",ans);
}

 

info[i][0] 는 i 번 작업에 소요되는 시간.

info[i][1] ~ info[i][sz-1] 은 선행 작업들의 번호이다. ( sz=info[i].size( ) )

 

 

반응형

'DS\Algo' 카테고리의 다른 글

BOJ 10256 Mutation( 돌연변이 )  (0) 2022.10.07
BOJ 13398 연속합 2  (0) 2022.10.07
BOJ 2302 극장 좌석  (0) 2022.10.05
BOJ 9250 문자열 집합 판별  (1) 2022.10.03
BOJ 17404 RGB 거리 2  (1) 2022.10.03
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
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 28 29 30 31
글 보관함