HDU 3433 (DP + 二分) A Task Process
题意:
有n个员工,每个员工完成一件A任务和一件B任务的时间给出,问要完成x件A任务y件B任务所需的最短时间是多少
思路:
DP + 二分我也是第一次见到,这个我只能说太难想了,根本想不到。
dp[i][j]表示在t时间内前i个人完成j件A任务后所能完成B任务的最大数量。
代码中还有一些注释。
//#define LOCAL
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std; int dp[][], a[], b[];
int _, n, x, y, kase = ; bool check(int t)
{
memset(dp, -, sizeof(dp));
dp[][] = ; for(int i = ; i <= n; ++i)
{
if(dp[i][x] >= y) return true;
for(int j = ; j <= x; ++j)
{
if(dp[i - ][j] != -)
{
int temp = min(t/a[i], x-j); //枚举第i个人可以做的A任务的个数
for(int k = ; k <= temp; ++k)
{
int t1 = (t - a[i] * k) / b[i]; //计算第i个人做k件A任务,所能做的B任务的个数
dp[i][j + k] = max(dp[i][j + k], dp[i - ][j] + t1); //选最优解
}
}
}
} if(dp[n][x] >= y) return true;
return false;
} int main(void)
{
#ifdef LOCAL
freopen("3433in.txt", "r", stdin);
#endif scanf("%d", &_);
while(_--)
{
scanf("%d%d%d", &n, &x, &y);
for(int i = ; i <= n; ++i)
scanf("%d%d", &a[i], &b[i]); int l = , r = a[] * x + b[] * y;
int ans = r;
while(l <= r)
{
int mid = (l + r) >> ;
if(check(mid))
{
ans = mid;
r = mid - ;
}
else l = mid + ;
} printf("Case %d: %d\n", ++kase, ans);
} return ;
}
代码君
HDU 3433 (DP + 二分) A Task Process的更多相关文章
- HDU 1025 DP + 二分
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1025 求最长递增子序列,O(n^2)的复杂度超时,需要优化为O(n*logn) f[i]存储长度为i的最小 ...
- 二分+DP HDU 3433 A Task Process
HDU 3433 A Task Process Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/ ...
- hdu 3433 A Task Process 二分+dp
A Task Process Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- 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 ...
- 两种解法-树形dp+二分+单调队列(或RMQ)-hdu-4123-Bob’s Race
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4123 题目大意: 给一棵树,n个节点,每条边有个权值,从每个点i出发有个不经过自己走过的点的最远距离 ...
- Hadoop:Task process exit with nonzero status of 1 异常
在运行hadoop程序时经常遇到异常 java.io.IOException: Task process exit with nonzero status of 1.网上很多博文都说是磁盘不够的问题. ...
- POJ-2533最长上升子序列(DP+二分)(优化版)
Longest Ordered Subsequence Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 41944 Acc ...
- Linux中的task,process, thread 简介
本文的主要目的是介绍在Linux内核中,task,process, thread这3个名字之间的区别和联系.并且和WINDOWS中的相应观念进行比较.如果你已经很清楚了,那么就不用往下看了. LINU ...
- hdu2993之斜率dp+二分查找
MAX Average Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
随机推荐
- Why we have to use epsg:900913 in OpenLayers
reference:http://docs.openlayers.org/library/spherical_mercator.html epsg:900913 is spicfy the Soher ...
- js调试-定位到函数所在文件位置
原文:http://www.cnblogs.com/52cik/p/js-console-show-source.html 在控制台输入要查找的函数名如votePost 然后回车: 函数源码粗显啦,并 ...
- java与.net之间xml传递,xml最前面多了个?
最近做一个项目,是java提供webservice供.net调用.参数采用xml格式.首先碰到的问题: 1).net这边采用XmlSerializer 方式序列化对象传递给对方.对方在本机调试可以收到 ...
- iOS-xib(自定义UITableViewCell)
1.创建一个自定义的xib
- DF学Mysql(一)——数据库基本操作
1.创建数据库 create Database <数据库名>; 注意:1)数据库名由字母.下划线.@.#和$组成 2)首字母不能是数字和$符号 3)不允许有空格和特殊字符 2.查看数据库 ...
- JAVA动态加载JAR包的实现
如何动态的加载这些驱动!不可能把所有的数据库驱动都集成到JAR包中吧?!于是动态加载驱动的JAR包就产生了!其实这些在做系统基础代码时,经常用到,只是一般我们没有机会去搞而已. 动态加载JAR包,使用 ...
- 矩阵快速幂 POJ 3070 Fibonacci
题目传送门 /* 矩阵快速幂:求第n项的Fibonacci数,转置矩阵都给出,套个模板就可以了.效率很高啊 */ #include <cstdio> #include <algori ...
- 唉,还是Windows好
作为一个计算机专业的,常常抱怨Windows慢.一个系统用一段时间慢下来就重装,但是次次重装很麻烦,每次重装之后还得装软件. 另外,Windows比Linux占资源,所以前段时间就想以Linux为主要 ...
- python下划线变量的含义
_xxx 不能用'from module import *'导入 __xxx__ 系统定义名字 __xxx 类中的私有变量名 核心风格:避免用下划线作为变量名的开始. "单下 ...
- C编译器剖析PDF文档及UCC编译器162.3
http://blog.csdn.net/sheisc/article/details/42387857 http://blog.csdn.net/sheisc/article/details/455 ...