台州 OJ 1555 Chores 贪心+深搜

Posted 淡蓝色光

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了台州 OJ 1555 Chores 贪心+深搜相关的知识,希望对你有一定的参考价值。

给 n 个任务,有些任务会有前驱任务,不相关的任务可以同时做,求把这些任务做完的最少时间是多少。

比较水的一道题,任务能尽早开始就尽早开始做(从时间点0开始),如果有前驱任务,就要把前驱任务完成的时间也加上,完成时间最长的任务的时间就是答案

代码:

#include <iostream>
#include <cstring>
#include <vector>
using namespace std;

const int MAX = 10005;
const int INF = 0x3fffffff;

vector<int> pre[MAX];
int value[MAX];
int finish[MAX];
int n, maxn = 0;

int dfs(int i, int now);

int main(){
    //freopen("input.txt", "r", stdin);
    scanf("%d", &n);
    for(int i=1; i<=n; i++){
        scanf("%d", value+i);
        int m;
        scanf("%d", &m);
        for(int j=1; j<=m; j++){
            int t;
            scanf("%d", &t);
            pre[i].push_back(t);
        }
    }
    
    memset(finish, -1, sizeof(finish));
    for(int i=1; i<=n; i++){
        maxn = max(maxn, dfs(i, 0));
    }
//    for(int i=1; i<=n; i++){
//        cout << finish[i] << " ";
//    }
    cout << maxn;
} 

int dfs(int i, int now){
    if(finish[i] != -1)
        return finish[i];
    int finishTime = value[i];    
    for(int j=0; j<pre[i].size(); j++){
        finishTime = max(finishTime, dfs(pre[i][j], 0) + value[i]);    //有前驱任务,就加上前驱任务完成的时间 
    }
    finish[i] = finishTime;
    return finish[i];
}

 

以上是关于台州 OJ 1555 Chores 贪心+深搜的主要内容,如果未能解决你的问题,请参考以下文章

台州 OJ 2378 Tug of War

台州 OJ 2649 More is better 并查集

台州 OJ 3847 Mowing the Lawn 线性DP 单调队列

台州OJ 3709: Number Maze (数组越界不报RE,报WA坑爹)

台州 OJ 5072 Cow Exhibition 01背包

台州 OJ 2793 石子归并 区间DP