P1113 杂务【洛谷算法习题】
P1113 杂务网页链接P1113 杂务题目描述John 的农场在给奶牛挤奶前有很多杂务要完成每一项杂务都需要一定的时间来完成它。比如他们要将奶牛集合起来将他们赶进牛棚为奶牛清洗乳房以及一些其它工作。尽早将所有杂务完成是必要的因为这样才有更多时间挤出更多的牛奶。当然有些杂务必须在另一些杂务完成的情况下才能进行。比如只有将奶牛赶进牛棚才能开始为它清洗乳房还有在未给奶牛清洗乳房之前不能挤奶。我们把这些工作称为完成本项工作的准备工作。至少有一项杂务不要求有准备工作这个可以最早着手完成的工作标记为杂务1 11。John 有需要完成的n nn个杂务的清单并且这份清单是有一定顺序的杂务k ( k 1 ) k\ (k1)k(k1)的准备工作只可能在杂务1 11至k − 1 k-1k−1中。写一个程序依次读入每个杂务的工作说明。计算出所有杂务都被完成的最短时间。当然互相没有关系的杂务可以同时工作并且你可以假定 John 的农场有足够多的工人来同时完成任意多项任务。输入格式第1 11行一个整数n ( 3 ≤ n ≤ 10,000 ) n\ (3 \le n \le 10{,}000)n(3≤n≤10,000)必须完成的杂务的数目第2 22至n 1 n1n1行每行有一些用空格隔开的整数分别表示工作序号保证在输入文件中是从1 11到n nn有序递增的完成工作所需要的时间l e n ( 1 ≤ l e n ≤ 100 ) len\ (1 \le len \le 100)len(1≤len≤100)一些必须完成的准备工作总数不超过100 100100个由一个数字0 00结束。有些杂务没有需要准备的工作只描述一个单独的0 00。保证整个输入文件中不会出现多余的空格。输出格式一个整数表示完成所有杂务所需的最短时间。输入输出样例 #1输入 #17 1 5 0 2 2 1 0 3 3 2 0 4 6 1 0 5 1 2 4 0 6 8 2 4 0 7 4 3 5 6 0输出 #123解题思路本题核心是动态规划求解带依赖关系的并行任务最短耗时属于经典关键路径问题。由于杂务编号严格递增且所有前置任务都在当前任务之前无需拓扑排序即可直接递推。定义ans[i]为完成第i项杂务的最早时间其值为所有前置依赖任务的最大完成时间加上当前任务耗时。遍历每一项杂务读取耗时与前置任务计算当前任务完成时间并维护全局最大完成时间。该最大值即为并行完成所有杂务的最短总时间算法线性遍历时间复杂度O(n)完美适配n≤10000的数据规模。总结核心逻辑并行执行无冲突杂务任务的最早完成时间由前置任务的最晚完成时间决定全局最大值为总耗时。关键操作按任务顺序递推计算完成时间实时更新全局最大耗时。效率保障依托任务依赖的有序性直接线性计算无冗余操作高效简洁。代码内容#includebits/stdc.husingnamespacestd;typedeflonglongll;typedefunsignedlonglongull;typedefvectorvectorllvt;typedefpairll,llpll;constll N1e410;constll p1e97;constll INF1e18;constll M5e310;ll ans[N],mx;intmain(){ll n,l,t;cinn;for(ll i1;in;i){cinil;ll tp0;while(cintt)tpmax(ans[t],tp);ans[i]tpl;mxmax(ans[i],mx);}coutmxendl;return0;}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2486910.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!