工程

时间限制:1000 ms  |  内存限制:65535 KB

描述

有n个工人做两个工程A和B,每个工程都被分为相同的m份,给你第i个工人做A中的一份需要的时间Xi秒,和做B中的一份所需时间Yi秒,问最短需要多少时间可以完成这两项工程。

输入

第一行是一个整数t (1 <= t <= 100),表示有t组测试数据;
每组测试数据第一行有两个整数 n (1 <= n <= 100), m (1 <= m <= 100).
接下来的n行,每行有两个整数Xi,Yi;

输出

输出最短时间,占一行。

样例输入

1
3 20
1 1
2 4
1 6

样例输出

18

分析:

首先,二分的下界是0,上界是完成A,B两个工程所需的最长时间,然后二分答案。

其次,对于一个答案mid是否符合条件(完成两个工程),任选一个人,初始化dp数组,他完成i个工作A,之后还可以完成dp[i]个工作B,然后判断剩余的n-1个人是否可以完成其余的工作

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;const int MAXN = 110;int Ap[MAXN];
int Bp[MAXN];
int dp[MAXN];//dp[i]表示完成i个工作A,之后还能完成多少个工作B
int n,m;int MAX(int a, int b)
{return a > b ? a : b;
}int slove( int mid )
{int i,j,k;memset(dp, -1, sizeof(dp));for(i = 0; i <= m; ++i)//第一个人完成i个A,还可以完成多少个Bif(mid >= i*Ap[1])dp[i] = (mid-i*Ap[1])/Bp[1];elsebreak;if(dp[m] >= m)
//如果第一个人完成A之后,还有足够的时间来完成B,那么就说明这个mid时间是可以的return 1;//如果剩下的时间不足以完成B,或者给定mid的时间完不成A, 剩下的就是背包思想for(i = 2; i <= n; ++i){
//既然第一个人不能在给定的mid时间内完成两个任务,那么接下来在让其他人上,看前i是否可以完成任务for(j = m; j >= 0; --j){for(k = 0; k <= j && k*Ap[i] <= mid; ++k){//如果第i个人可以完成k份工作A,并且前i-1个人已完成了j-k个工作A,
//(即是否可以留更多的时间来做更多的工作)那么前i个工人还可以完成多少份工作?if(dp[j-k] != -1)dp[j] = MAX(dp[j], dp[j-k]+(mid-k*Ap[i])/Bp[i]);}}
//如果前i(包括i)个工人完成A之后还能完成B,那么返回1,说明mid满足if(dp[m] >= m)return 1;}return 0;
}int main()
{int i,T;scanf("%d", &T);while(T--){int maxtime = 0;scanf("%d%d",&n,&m);for(i = 1; i <= n; ++i){scanf("%d%d",&Ap[i],&Bp[i]);maxtime = MAX(maxtime, MAX(Ap[i], Bp[i]));}int L = 0,R = (maxtime*m) << 1;while(L < R){int mid = (L + R)>>1;if(slove(mid))
//如果给定的mid时间一直都满足,那么继续收缩区间,直到找到一个最小的时间R = mid;elseL = mid + 1;}printf("%d\n",L);}return 0;
}

NYOJ 229 工程 二分+dp检验相关推荐

  1. 洛谷 P1800 software_NOI导刊2010提高(06)(二分答案+DP检验)

    P1800 software_NOI导刊2010提高(06) 标签 二分答案 难度 普及/提高- 题目描述 一个软件开发公司同时要开发两个软件,并且要同时交付给用户,现在公司为了尽快完成这一任务,将每 ...

  2. 【bzoj1044】[HAOI2008]木棍分割 二分+dp

    题目描述 有n根木棍, 第i根木棍的长度为Li,n根木棍依次连结了一起, 总共有n-1个连接处. 现在允许你最多砍断m个连接处, 砍完后n根木棍被分成了很多段,要求满足总长度最大的一段长度最小, 并且 ...

  3. 2022年南京二级建造师城市轨道交通工程质量检查与检验试题及答案

    题库来源:优题宝公众号 2022年南京二级建造师城市轨道交通工程质量检查与检验试题及答案,由优题宝公众号根据最新二级建造师大纲与历年真题汇总编写,包含二级建造师常考重点题型与知识点,有助于考生复习备考 ...

  4. 2022年重庆二级建造师市政公用工程《城市桥梁工程质量检查与检验》每日练习及答案

    题库来源:优题宝公众号 2022年重庆二级建造师市政公用工程<城市桥梁工程质量检查与检验>每日练习及答案,由优题宝公众号根据最新二级建造师市政公用工程大纲与历年真题汇总编写,包含二级建造师 ...

  5. hdu1025 Constructing Roads In JGShining#39;s Kingdom(二分+dp)

    转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1025 Problem ...

  6. bzoj 1863 二分+dp check

    思路:二分之后用dp去check就好啦. #include<bits/stdc++.h> #define LL long long #define fi first #define se ...

  7. hihocoder #1362 : 修补木桶(二分+dp)

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 一只木桶能盛多少水,并不取决于桶壁上最高的那块木板,而恰恰取决于桶壁上最短的那块. 已知一个木桶的桶壁由N块木板组成,第i ...

  8. hdu 4495(hash+二分+dp)

    题意:求一个n*m的矩阵里面的最大的一个对称等腰直角三角形,三角形的腰必须平行于矩阵的边,n,m<=500. 解题思路:腰平行于矩阵的边,其实也就是做四个方向,首先找到每一个点的最长腰f[i][ ...

  9. poj 2397(二分+dp)

    题意:蜘蛛侠可以上下跳,问如何跳可以使得达到的最高高度尽可能小.并且最后的位置要在地面. 解题思路:首先记录跳的所有高度和sum,蜘蛛侠所能达到的最高高度肯定在1-sum之间(否则不可能做到),标准的 ...

最新文章

  1. Linux 最常用命令整理,建议收藏!
  2. Filter和Listener-学习笔记02【Filter细节】
  3. Java阻塞队列 LinkedBlockingDeque
  4. java后ping不是内部_ping不是内部或外部命令,也不是可运行的程序解决方案
  5. 安宁计算机学院,合肥工业大学计算机与信息学院导师介绍:安宁
  6. 本地分发_2020年分发Python应用程序的12个热门途径
  7. http --- 网关、隧道、中继
  8. 和平精英现在服务器暂时未开放,和平精英为什么登陆不进去 和平精英服务器分批登陆是什么意思...
  9. 易到追债贾跃亭 乐视回应:对方无耻甩锅
  10. php.ini 302,302使用nginx和WordPress重定向循环
  11. React Native按钮详解|Touchable系列组件使用详解
  12. 中国女子高尔夫球场市场趋势报告、技术动态创新及市场预测
  13. q-learning_教计算机如何通过Q-Learning玩Snake
  14. python下载安装教程
  15. java 生成随机数_JAVA生成随机数
  16. silvaco的石墨烯fet仿真_COMSOL Multiphysics多物理场仿真光电学习必看的内容
  17. 服务器运维KPI指标,运维服务工程师考核表.docx
  18. crtlc不能复制文件_win10系统按ctrl+c快捷键无法复制文件的操作方法
  19. tree是不是动词_tree是什么意思!
  20. 测试工程师如何提升自己

热门文章

  1. Zookeeper-watcher机制源码分析(二)
  2. React-Native系列Android——Native与Javascript通信原理(一)
  3. VS 团队资源管理 强制解锁锁定文件
  4. Google Chrome v48.0.2564.
  5. 作业综合练习-初始化工作
  6. VS2005 自动生成属性(转)
  7. centos 开机启动java_java程序在centos7里面开机自启动
  8. tipi 深入理解php内核 pdf_大牛的学习笔记-深入理解Linux内核(完整版)
  9. java输出二进制数_Java打印整数的二进制表示(代码与解析)
  10. 华为云龙api自动化工具_2020年十大最佳自动化测试工具