题意:

有n个人,X个任务A,Y个任务B,

给出每个人做A做B的时间,一个人只能在某个时刻做一个工作,

问最短时间完成所有工作。

思路:

二分n个人用的时间,判断最优条件用DP。

可以二分就是因为时间越多的话肯定能做更多的task啊。

真的好神奇!n个人可以同一时间一起做事,那么对于给定的时间,也就是说每个人都拥有这么多时间,无非就是他会去怎么安排,那么就DP啊。

dp[i][j] 代表前 i 个人搞了 j 个A以后,还能搞多少个B;

判断一发就是个0/1背包,背包容量就是时间,枚举第i个人做A任务的数量 j ,那么B的数量 (time-a[i]*(j-k))/b[i];

//话说 对于求时间的问题,用二分搞的好多了!!!以后要想过去!!!DP最优解。

//突然发现对于二分这个搞法,真是每次想到都追悔莫及,瞎歪歪了一个点子:

//钱越多东西就可以买的越多;时间花的越多,事情就可以办的更多;the more...,the more...就可以用二分

#include<bits/stdc++.h>
using namespace std;
typedef __int64 LL;
int dp[210];
int a[60];
int b[60];
int n,X,Y; bool DP(int time)
{
memset(dp,-1,sizeof(dp));
dp[0]=0; for(int i=1;i<=n;i++)
{
for(int j=X;j>=0;j--)//枚举能够处理j个A
{
for(int k=j;k>=0;k--)
{
if(time>=(j-k)*a[i]&&dp[k]!=-1)
dp[j]=max(dp[j],dp[k]+(time-a[i]*(j-k))/b[i]);
}
}
if(dp[X]>=Y)
return true;
}
return false;
}
int main()
{
int T,cas=1;
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d",&n,&X,&Y);
for(int i=1; i<=n; ++i)
scanf("%d%d",&a[i],&b[i]); int left=0;
int right=600*1000;
while(left<right)
{
int mid=left+(right-left)/2;
if(DP(mid))
right=mid;
else
left=mid+1;
}
printf("Case %d: %d\n",cas++,left);
}
return 0;
}

HDU3433 【时间的二分+DP最优解】的更多相关文章

  1. 二分+DP HDU 3433 A Task Process

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

  2. hdu 3433 A Task Process 二分+dp

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

  3. 「学习笔记」wqs二分/dp凸优化

    [学习笔记]wqs二分/DP凸优化 从一个经典问题谈起: 有一个长度为 \(n\) 的序列 \(a\),要求找出恰好 \(k\) 个不相交的连续子序列,使得这 \(k\) 个序列的和最大 \(1 \l ...

  4. 2018.10.24 NOIP模拟 小 C 的数组(二分+dp)

    传送门 考试自己yyyyyy的乱搞的没过大样例二分+dp二分+dp二分+dp过了606060把我自己都吓到了! 这么说来乱搞跟被卡常的正解比只少101010分? 那我考场不打其他暴力想正解血亏啊. 正 ...

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

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

  6. Luogu P2511 [HAOI2008]木棍分割 二分+DP

    思路:二分+DP 提交:3次 错因:二分写萎了,$cnt$记录段数但没有初始化成$1$,$m$切的次数没有$+1$ 思路: 先二分答案,不提: 然后有个很$naive$的$DP$: 设$f[i][j] ...

  7. 洛谷$P4322\ [JSOI2016]$最佳团体 二分+$dp$

    正解:二分+$dp$ 解题报告: 传送门$QwQ$ 这题长得好套路嗷,,,就一看就看出来是个$01$分数规划+树形$dp$嘛$QwQ$. 考虑现在二分的值为$mid$,若$mid\leq as$,则有 ...

  8. $bzoj3872\ [Poi2014]\ Ant\ colony$ 二分+$dp$

    正解:二分+$dp$ 解题报告: 传送门$QwQ$ 一年过去了依然没有头绪,,,$gql$的$NOIp$必将惨败了$kk$. 考虑倒推,因为知道知道除数和答案,所以可以推出被除数的范围,然后一路推到叶 ...

  9. Codeforces Round #367 (Div. 2) A B C 暴力 二分 dp(字符串的反转)

    A. Beru-taxi time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

随机推荐

  1. Presenting view controllers on detached view controllers is discouraged

    本文转载至 http://www.xuebuyuan.com/2117943.html Presenting view controllers on detached view controllers ...

  2. LogStash 日志搜集

    安装 下载:https://download.elastic.co/logstash/logstash/logstash-2.4.0.tar.gz 解压到指定目录即可 配置 bin目录添加logsta ...

  3. easyui datagrid 加载静态文件中的json数据

    本文主要介绍easyui datagrid 怎么加载静态文件里的json数据,开发环境vs2012, 一.json文件所处的位置 二.json文件内容 {"total":28,&q ...

  4. svn提交异常file is scheduled for addition, but is missing

    svn提交错误file is scheduled for addition, but is missing svn ci -m "" svn: E155010: Commit fa ...

  5. Multi-lingual Support

    Multi-lingual Support One problem with dealing with non-Latin characters programmatically is that, f ...

  6. Python序列——元组

    元组是什么 1 创建元组 2 访问元组中的值 3 更新元组中的元素 4 删除元组中的元素或者元组本身 元组相关操作 内建函数对元组的支持 1 序列类型函数 2 元组内建函数 元组的特殊性 1. 元组是 ...

  7. POJ1006 Biorhythms —— 中国剩余定理

    题目链接:https://vjudge.net/problem/POJ-1006 Biorhythms Time Limit: 1000MS   Memory Limit: 10000K Total ...

  8. BZOJ 1623 [Usaco2008 Open]Cow Cars 奶牛飞车:贪心

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1623 题意: 编号为1到N的N只奶牛正各自驾着车打算在牛德比亚的高速公路上飞驰.高速公路有 ...

  9. APTM敏捷性能测试模型

    随着应用系统的日趋复杂,仅在系统测试和验收测试阶段执行性能测试已经不能满足迟早发现和解决系统性能瓶颈的要求,Connie Smith博士和Lloyd Winlliams博士在他们提出 的软件性能工程( ...

  10. Unable to create Debug Bridge:Unable to start adb server:error:cannot parse version

    打开Android Studio时报如下错误提示: Unable to create Debug Bridge:Unable to start adb server:error:cannot pars ...