一、题目

二、解题思路
这道题难度比较低,双重for循环直接搞定,主要因为题目给的限制条件比较多,降低了题的难度。如果去掉限定条件,杂务k的准备工作只能在杂务1至k-1之间,那题目难度将会适当增大。现在加入限定条件,相当于我们只需要从小到大确定杂务的执行结束时间,但如果取消该条件后,我们每次都需要去寻找,到底哪个杂务的执行结束时间能被确定(即需要找到前驱已经确定的那个杂务)。
三、代码
#include<iostream>
#include<string>
#include<vector>
#include<map>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
int main(){
int n;
cin>>n;
vector<vector<int>> all_pre(n+1, vector<int>());
vector<int> finish_time(n+1), costs(n+1);
int ret;
for(int i=1;i<=n;i++){
int id;
cin>>id;
int cost;
cin>>cost;
costs[i]=cost;
int pre_task;
cin>>pre_task;
while(pre_task){
all_pre[i].push_back(pre_task);
cin>>pre_task;
}
}
finish_time[1]=costs[1];
ret=finish_time[1];
for(int i=2;i<=n;i++){
int max_time=0;
for(int j=0;j<all_pre[i].size();j++){
max_time=max(max_time, finish_time[all_pre[i][j]]);
}
finish_time[i]=max_time+costs[i];
ret=max(finish_time[i], ret);
}
cout<<ret;
}
最后
以上就是冷傲含羞草最近收集整理的关于P1113杂务一、题目二、解题思路三、代码的全部内容,更多相关P1113杂务一、题目二、解题思路三、代码内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复