poj 1949

题目描述:

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

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

解题报告:

“前面的”,知道这些任务已经是top排序好的了。

dp[i] = 完成第i个任务时所需的最短的时间。

dp[i] = max(dp[j]) xi, j是需要在它前面完成的任务的序号。

max(dp[i])就是答案。

代码:

#include<iostream>
#include<fstream>

using namespace std;

int dp[10001];

void read(){
//    ifstream cin("in.txt");
    int i,j,k,s,t,p;
    int n;
    cin>>n;
    int ans=0;
    for(i=1;i<=n;i++)
    {
        cin>>j>>k;
        p=0;
        for(s=1;s<=k;s++)
        {
            cin>>t;
            p=max(p,dp[t]);
        }
        dp[i]=p+j;
        ans=max(dp[i],ans);
    }
    cout<<ans<<endl;
}

int main(){
    read();
    return 0;
}

posted on 2011-02-23 13:28  宇宙吾心  阅读(684)  评论(0编辑  收藏  举报

导航