zoukankan      html  css  js  c++  java
  • [Poj #1949] Chores

    1949号题,果然非常良心。
    数据已经拓扑排序好了,那我们直接做。
    dp[i]表示完成任务i所需的最小时间,易dp[i]=max{dp[pre[i][j]]}+a[i],其中pre[i][j]表示i的第j个前需家务。
    然后把所有dp值取最大,就是答案了。

    #include<cstdio>
    using namespace std;
    int maxf(int x,int y){return x>y?x:y;}
    int minf(int x,int y){return x<y?x:y;}
    int dp[100010];
    int pre[100010][110];
    int a[100010];
    int main()
    {
    	int n,m,i,j,k,x,y,z,ans;
    	scanf("%d",&n);
    	for(i=1;i<=n;i++)
    	{
    		scanf("%d",&a[i]);
    		scanf("%d",&pre[i][0]);
    		for(j=1;j<=pre[i][0];j++)
    		scanf("%d",&pre[i][j]);
    	}
    	for(i=1;i<=n;i++)
    	{
    		dp[i]=0;
    		for(j=1;j<=pre[i][0];j++)
    		{
    			dp[i]=maxf(dp[i],dp[pre[i][j]]);
    		}
    		dp[i]+=a[i];
    	}
    	ans=0;
    	for(i=1;i<=n;i++)
    	ans=maxf(ans,dp[i]);
    	printf("%d
    ",ans);
    	return 0;
    }
    /*
    //sample
    7
    5 0
    1 1 1
    3 1 2
    6 1 1
    1 2 2 4
    8 2 2 4
    4 3 3 5 6
    ans:23
    */
    
  • 相关阅读:
    senium
    学习记录
    方法参数化
    洛谷1892 团伙
    洛谷2661 信息传递
    洛谷2661 信息传递
    洛谷1576最小花费
    洛谷1576最小花费
    最短路 Dijkstra模板
    堆排(模板)
  • 原文地址:https://www.cnblogs.com/Rain142857/p/11731328.html
Copyright © 2011-2022 走看看