AB两个人分配任务 在规定时间内 完成任务综合最多为多少



package work;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Arrays;
import java.util.Scanner;
public class MissonMy {
 static int N;
 static int[][] work;// 0开始时间;1结束时间;2工作时间
 static int max_time;

 public static void main(String args[]) throws FileNotFoundException {
  /* Scanner sc=new Scanner(System.in); */
  Scanner sc = new Scanner(new File("src/misson.txt"));
  int T = sc.nextInt();
  for (int i = 0; i < T; i++) {
   N = sc.nextInt();
   work = new int[N][3];
   for (int j = 0; j < N; j++) {
    work[j][0] = sc.nextInt() * 60 + sc.nextInt();
    work[j][1] = sc.nextInt() * 60 + sc.nextInt();
    work[j][2] = work[j][1] - work[j][0];
   }
   Qsort(0, N - 1, work);
/*   for (int j = 0; j < N; j++) {
    System.out.println(Arrays.toString(work[j]));
   }
   System.out.println();*/
   max_time = 0;
   dfs(0, 0, 0, 0);
   System.out.println(max_time);
  }
 }
 private static void dfs(int step, int time, int enda, int endb) {
  if (step == N) {
   if (max_time<time)
    max_time = time;
   return;
  }
  // A做
  if (work[step][0] >= enda)
   dfs(step + 1, time + work[step][2], work[step][1], endb);
  // B做
  if (work[step][0] >=endb)
   dfs(step + 1, time + work[step][2], enda, work[step][1]);
  // 不做
  dfs(step + 1, time , enda, endb);
 }
 private static void Qsort(int l, int r, int[][] ss) {
  if (l < r) {
   int[] key=new int[3];
   copy(key,ss[r]);
   int i = l;
   int j = r;
   while (i < j) {
    while (i < j && ss[i][0] < key[0])
     i++;
    copy(ss[j],ss[i]);
    while (i < j && ss[j][0] >= key[0])
     j--;
    copy(ss[i],ss[j]);
   }
   copy(ss[j],key);
   Qsort(l, j - 1, ss);
   Qsort(j + 1, r, ss);
  }
 }

 private static void copy(int[] r, int[] s) {
  for (int i = 0; i < s.length; i++) {
   r[i]=s[i];
  }
 }

}

、、input

6
5
8 0 14 0
9 0 12 0
13 0 18 0
10 0 17 0
10 30 13 30
6
8 0 18 10
13 10 15 20
10 50 13 30
13 20 18 10
12 0 12 50
12 0 15 30
8
10 40 12 20
9 10 15 10
11 0 16 30
11 50 15 50
8 30 13 50
15 0 18 10
9 30 10 10
13 10 18 30
10
10 50 13 50
9 40 12 0
8 20 15 10
8 30 10 20
11 40 13 20
8 20 13 50
14 20 18 10
15 0 16 40
8 0 16 50
10 0 11 10
14
10 40 15 50
9 40 10 0
12 40 16 10
12 40 13 0
12 20 17 40
11 40 17 30
9 0 12 0
16 10 17 30
17 0 18 40
8 40 12 40
8 20 14 30
12 40 18 40
15 0 16 20
9 40 10 10
15
8 10 8 20
8 30 8 40
9 40 10 10
10 20 10 30
10 40 10 50
11 0 11 20
11 20 11 40
11 50 12 30
12 50 13 40
12 10 12 40
12 50 13 30
13 40 14 40
14 50 15 20
15 30 15 50
16 10 16 40

、、output

900
950
970
1090
1150
410

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值