动态规划-poj1949

题目链接:http://poj.org/problem?id=1949

题目描述:

思路:用一个数组dp来存完成第i个任务时所需的最短的时间,dp[i] = max(dp[j]) +time, j是需要在它前面完成的任务的序号,time是完成当前任务所需时间。

对于任务5来说,

代码实现:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 using namespace std;
 5 int dp[100001];
 6 int main()
 7 {
 8     int ans=0;
 9     int  i,s,cost,pre,t,p,n;
10     scanf("%d",&n);
11     for(i=1;i<=n;i++){
12         scanf("%d%d",&cost,&pre);
13         p=0;//p每次都要清零
14         for(s=1;s<=pre;s++){
15             scanf("%d",&t);
16             p=max(p,dp[t]);//p记录的前驱任务完成所需的最长时间,如果有多个前驱,就是去找出最长的前驱任务完成时间
17 } 18 dp[i]=p+cost;//当前任务完成所需最短时间等于前驱任务完成的时间+自身完成时间cost 19 ans=max(dp[i],ans);//ans所取值是所有dp[i]中的最大值,也就是所有任务完成的最少时间。 20 } 21 printf("%d\n",ans); 22 return 0; 23 }

 

posted @ 2018-11-27 22:09  里昂静  阅读(169)  评论(0编辑  收藏  举报