POJ 1949 DP?

题意:
有n个家务,第i个家务需要一定时间来完成,并且第i个任务必须在它 “前面的” 某些任务完成之后才能开始。

给你任务信息,问你最短需要多少时间来完成任务。

输入:
第一行n个家务
第2~n+1行:每行第一个数字:完成这件家务所用的时间。
第二个数字:需要前面几个家务才能做这件。
随后是家务的编号

思路:

chore K (K > 1) can have only chores 1,.K-1 as prerequisites
这不就成超级无敌大水题了嘛。
每回找到编号前面的最大值。 更新一下就OK了。

// by SiriusRen
#include <cstdio>
#include <algorithm>
using namespace std;
int n,time[10005],jy,xx,ans=0;
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d",&time[i]);
        scanf("%d",&jy);
        int temp=0;
        while(jy--)
            scanf("%d",&xx),temp=max(time[xx],temp);
        time[i]+=temp;
    }
    for(int i=1;i<=n;i++)ans=max(ans,time[i]);
    printf("%d
",ans);
}

这里写图片描述

原文地址:https://www.cnblogs.com/SiriusRen/p/6532340.html