4.16每日一题——杂务 (dp)

今天这道题,可用拓扑排序思想解,也可以用dp,dp相对而言代码更加简洁,加上我还没掌握好拓扑,看来还是得加吧劲学习了

题目

1.题目描述

题目链接

John的农场在给奶牛挤奶前有很多杂务要完成,每一项杂务都需要一定的时间来完成它。比如:他们要将奶牛集合起来,将他们赶进牛棚,为奶牛清洗乳房以及一些其它工作。尽早将所有杂务完成是必要的,因为这样才有更多时间挤出更多的牛奶。当然,有些杂务必须在另一些杂务完成的情况下才能进行。比如:只有将奶牛赶进牛棚才能开始为它清洗乳房,还有在未给奶牛清洗乳房之前不能挤奶。我们把这些工作称为完成本项工作的准备工作。至少有一项杂务不要求有准备工作,这个可以最早着手完成的工作,标记为杂务11。John有需要完成的nn个杂务的清单,并且这份清单是有一定顺序的,杂务k(k>1)k(k>1)的准备工作只可能在杂务11至k-1k−1中。

2.解题思路

因为有些杂务是需要在前驱杂物完成后才开始做,且杂物是有顺序的,即要是得完成所有杂物所需要时间最短,就是该杂物的最早完成时间就是本身时间加上其前驱中所需要耗费的的最大时间,并在所有杂物最早完成时间取最大一个就是答案啦,符合dp思想

3.AC代码

import java.util.Arrays;
import java.util.Scanner;
public class Main{
	static int n;
	static int[] w;//第id个任务完成的时间
	static int res;//所有杂物做完最早完成的时间
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		n=sc.nextInt();
		w=new int[n+1];
		for(int i=0;i<n;i++) {
			int id=sc.nextInt();
			int len=sc.nextInt();
			w[id]=len;
			int a=sc.nextInt();
			while(a!=0) {
				w[id]=Math.max(w[id], len+w[a]);
				a=sc.nextInt();
			}
			res=Math.max(res, w[id]);
		}
		System.out.println(res);
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爬行系

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值