题意:

有n个员工,每个员工完成一件A任务和一件B任务的时间给出,问要完成x件A任务y件B任务所需的最短时间是多少

思路:

DP + 二分我也是第一次见到,这个我只能说太难想了,根本想不到。

dp[i][j]表示在t时间内前i个人完成j件A任务后所能完成B任务的最大数量。

代码中还有一些注释。

  1. //#define LOCAL
  2. #include <iostream>
  3. #include <cstdio>
  4. #include <cstring>
  5. using namespace std;
  6.  
  7. int dp[][], a[], b[];
  8. int _, n, x, y, kase = ;
  9.  
  10. bool check(int t)
  11. {
  12. memset(dp, -, sizeof(dp));
  13. dp[][] = ;
  14.  
  15. for(int i = ; i <= n; ++i)
  16. {
  17. if(dp[i][x] >= y) return true;
  18. for(int j = ; j <= x; ++j)
  19. {
  20. if(dp[i - ][j] != -)
  21. {
  22. int temp = min(t/a[i], x-j); //枚举第i个人可以做的A任务的个数
  23. for(int k = ; k <= temp; ++k)
  24. {
  25. int t1 = (t - a[i] * k) / b[i]; //计算第i个人做k件A任务,所能做的B任务的个数
  26. dp[i][j + k] = max(dp[i][j + k], dp[i - ][j] + t1); //选最优解
  27. }
  28. }
  29. }
  30. }
  31.  
  32. if(dp[n][x] >= y) return true;
  33. return false;
  34. }
  35.  
  36. int main(void)
  37. {
  38. #ifdef LOCAL
  39. freopen("3433in.txt", "r", stdin);
  40. #endif
  41.  
  42. scanf("%d", &_);
  43. while(_--)
  44. {
  45. scanf("%d%d%d", &n, &x, &y);
  46. for(int i = ; i <= n; ++i)
  47. scanf("%d%d", &a[i], &b[i]);
  48.  
  49. int l = , r = a[] * x + b[] * y;
  50. int ans = r;
  51. while(l <= r)
  52. {
  53. int mid = (l + r) >> ;
  54. if(check(mid))
  55. {
  56. ans = mid;
  57. r = mid - ;
  58. }
  59. else l = mid + ;
  60. }
  61.  
  62. printf("Case %d: %d\n", ++kase, ans);
  63. }
  64.  
  65. return ;
  66. }

代码君

HDU 3433 (DP + 二分) A Task Process的更多相关文章

  1. HDU 1025 DP + 二分

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1025 求最长递增子序列,O(n^2)的复杂度超时,需要优化为O(n*logn) f[i]存储长度为i的最小 ...

  2. 二分+DP HDU 3433 A Task Process

    HDU 3433 A Task Process Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/ ...

  3. hdu 3433 A Task Process 二分+dp

    A Task Process Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  4. hdu 1025:Constructing Roads In JGShining's Kingdom(DP + 二分优化)

    Constructing Roads In JGShining's Kingdom Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65 ...

  5. 两种解法-树形dp+二分+单调队列(或RMQ)-hdu-4123-Bob’s Race

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4123 题目大意: 给一棵树,n个节点,每条边有个权值,从每个点i出发有个不经过自己走过的点的最远距离 ...

  6. Hadoop:Task process exit with nonzero status of 1 异常

    在运行hadoop程序时经常遇到异常 java.io.IOException: Task process exit with nonzero status of 1.网上很多博文都说是磁盘不够的问题. ...

  7. POJ-2533最长上升子序列(DP+二分)(优化版)

    Longest Ordered Subsequence Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 41944   Acc ...

  8. Linux中的task,process, thread 简介

    本文的主要目的是介绍在Linux内核中,task,process, thread这3个名字之间的区别和联系.并且和WINDOWS中的相应观念进行比较.如果你已经很清楚了,那么就不用往下看了. LINU ...

  9. hdu2993之斜率dp+二分查找

    MAX Average Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

随机推荐

  1. Cortex-M3/4的Hard Fault调试方法

    1 Cortex-M3/4的Fault简介 Cortex-M3/4的Fault异常是由于非法的存储器访问(比如访问0地址.写只读存储位置等)和非法的程序行为(比如除以0等)等造成的.常见的4种异常及产 ...

  2. vi/vim使用指北 ---- Introducting the ex Editor

    本章介绍ex编辑器,为什么要介绍这样一个新的编辑器呢:其实ex编辑器不能算是一个新的编辑器,vi只是它的visual model,它已经是一个更普遍,基于行的编辑器.ex提供更大机动和范围的编辑命令. ...

  3. POJ3525 Most Distant Point from the Sea(半平面交)

    给你一个凸多边形,问在里面距离凸边形最远的点. 方法就是二分这个距离,然后将对应的半平面沿着法向平移这个距离,然后判断是否交集为空,为空说明这个距离太大了,否则太小了,二分即可. #pragma wa ...

  4. Javascript实现 图片的无缝滚动

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  5. UVA 11806 Cheerleaders dp+容斥

    In most professional sporting events, cheerleaders play a major role in entertaining the spectators. ...

  6. C#中out的用法

    out的用法 out 关键字会导致参数通过引用来传递.这与 ref 关键字类似,不同之处在于 ref 要求变量必须在传递之前进行初始化.若要使用 out 参数,方法定义和调用方法都必须显式使用 out ...

  7. JAVA实现Excel导出数据(以写好的Excel模版导出)

    工作中经常会有将后台数据以Excel导出的功能. 简单的方法有将response的contentType设置为application/vnd.ms-excel: 或在JSP页面直接设置成: <% ...

  8. 执行脚本出现bin/bash: bad interpreter: No such file or directory

    -bash: ./test.sh: /bin/bash^M: bad interpreter: No such file or directory VI打开文件,没发现任何问题, 把/bin/bash ...

  9. TASK_INTERRUPTIBLE 和TASK_UNINTERRUPTIBLE

    TASK_INTERRUPTIBLE 和TASK_UNINTERRUPTIBLE TASK_INTERRUPTIBLE 和TASK_UNINTERRUPTIBLE 的区别 TASK_INTERRUPT ...

  10. Android 核心分析 之五基本空间划分

    基本空间划分 Google给了我们一张系统架构图,在这张图上我们可以看到Android的大体框架组成.                   11.jpg (175.6 KB, 下载次数: 0) 下载附 ...