台州 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];
}
时间: 2024-08-30 14:17:48

台州 OJ 1555 Chores 贪心+深搜的相关文章

Comet OJ 篮球校赛 深搜

题目描述 JWJU注重培养学生的“唱,跳,rap,篮球”能力.于是每年JWJU都会举办篮球校赛,来给同学们一个切磋篮球技术的平台.校赛冠军的奖励是看wls女装一次,为了这个目标,大家都努力训练,希望自己能看到wls女装. 教练my手下有 n 名队员,现在他要挑选 5 人组成一个篮球队来参赛.众所周知,一个篮球队伍有五个不同的位置(控球后卫,得分后卫,小前锋,大前锋,中锋),现在教练mymy给出每名队员在每个位置的能力. 注:如果一个队员作为控球后卫出战,则他只能发挥他的控球后卫的能力值.(其他位

靶形数独【贪心+深搜】

问题描述小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向Z博士请教,Z博士拿出了他最近发明的"靶形数独",作为这两个孩子比试的题目. 靶形数独的方格同普通数独一样,在9格宽×9格高的大九宫格中有9个3格宽×3格高的小九宫格(用粗黑色线隔开的).在这个大九宫格中,有一些数字是已知的,根据这些数字,利用逻辑推理,在其他的空格上填入1到9的数字.每个数字在每个小九宫格内不能重复出现,每个数字在每行

哈理工OJ 2179(深搜)

组合 Time Limit: 1000 MS Memory Limit: 32768 K Total Submit: 7(5 users) Total Accepted: 6(5 users) Rating: Special Judge: No Description 给出一个正整数N,从集合{1,2,3..N} 中找出所有大小为k的子集, 并按照字典序从小到大输出. Input 第一行是一个整数T,代表T组测试数据. 接下来T行,每行是两个正整数n(1<=n<=10), k(1<=k&

A Knight&#39;s Journey(DFS)深搜

A Knight's Journey Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 33634 Accepted: 11450 Description Background The knight is getting bored of seeing the same black and white squares again and again and has decided to make a journey around

hdu 5313 Bipartite Graph 完全二分图 深搜 bitset应用

Bipartite Graph Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 577    Accepted Submission(s): 154 Problem Description Soda has a bipartite graph with n vertices and m undirected edges. Now he

【BZOJ】1016: [JSOI2008]最小生成树计数 深搜+并查集

最小生成树计数 Description 现在给出了一个简单无向加权图.你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的最小生成树.(如果两颗最小生成树中至少有一条边不同,则这两个最小生成树就是不同的).由于不同的最小生成树 可能很多,所以你只需要输出方案数对31011的模就可以了. Input 第 一行包含两个数,n和m,其中1<=n<=100; 1<=m<=1000; 表示该无向图的节点数和边数.每个节点用1~n的整数编号.接下来的m行,每行包含两个整数:a,

UVALive 2053 Puzzlestan(深搜+技巧)

这个题目的深搜形式,我也找出来了,dfs(i,j)表示第i个人选到了第j个物品,但是我却无限RE了,原因是我的viod型深搜太过暴力,我当时定义了一个计数器,来记录并限制递归的层数,发现它已经递归到了1500层,加上限制后,WA了……后来学习了网上的方法,使用bool型的深搜,每一次选择都去跟题目中给的限制去比较,看这次选择有没有冲突,如果没有搜下一个,当搜到false的时候,及时停止,节省了时间和空间. 伪代码: if(dfs(next)==true) return true: else re

西安邀请赛D题 字符串生成题 深搜

很抱歉,学校的OJ并不支持外网,而且还没有加上题目... 题意是说,求一个字符串,他的所有长度超过4的子串都是唯一的. 然后我当时是想aaaa, baaa, caaa, daaa...这样巴拉巴拉一直生成下去的,后来发现真的是想的太天真了,因为前面的两个长度为4的子串("aaaabaaa")的存在,直接封杀了3个子串("aaab", "aaba", "abaa").然后我就想记录状态去试着暴力去跑一个生成机.其实也很简单,就是

六月二十日 上午(深搜)

1最佳调度问题 题目描述 假设有n个任务由k个可并行工作的机器来完成.完成任务i需要的 时间为ti.试设计一个算法找到出完成这个n个任务的最佳调度,使得完成全部任务的时间最早. 对任意给定的整数n和k,以及完成任务i需要的时间为ti,1<=i<=n.编程计算完成这n个任务的最佳调度. n<=20,k<=8 输入 第1 行有2个正整数n 和k.第2行的n个正整数是完成n 根任务需要的时间. 输出 计算出的完成全部任务的最早时间 样例输入 7 3 2 14 4 16 6 5 3 样例输