题意是有N行任务,给出完成每项任务所需要的时间长度,求出完成所有任务所需要的最短时间.每个任务都会有一个约束条件,就是在完成这项任务之前必须完成所列出的其它任务.可以同时做多项任务.简单来说就像煮饭炒菜问题一样,可以一边烧饭一边炒菜.但炒菜之前必先洗菜.
不要想太复杂了,杂活i所需要的时间是本身的时间加上完成前提杂活的最晚时间。完成杂活的总时间就是各个杂活完成的最大时间。
#include<stdio.h>
#include<string.h>
int n,time,pre,num,ans,maxn;
int dp[20005];
int main(){
while(scanf("%d",&n)!=EOF)
{
ans=-1;
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++)
{
maxn=0;
scanf("%d%d",&time,&pre);
for(int j=1;j<=pre;j++)
{
scanf("%d",&num);
if(dp[num]>maxn)
maxn=dp[num];
}
dp[i]= maxn+time;
if(dp[i]>ans)
ans=dp[i];
}
printf("%d\n",ans);
}
return 0;
}
poj 1949 Chores
最新推荐文章于 2018-08-04 21:27:18 发布