题意:

有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. 平滑的滚动listview到一个指定位

    http://blog.csdn.net/w8320273/article/details/9043339

  2. Netty 仿QQ聊天室 (实战二)

    Netty 聊天器(百万级流量实战二):仿QQ客户端 疯狂创客圈 Java 分布式聊天室[ 亿级流量]实战系列之15 [博客园 总入口 ] 源码IDEA工程获取链接:Java 聊天室 实战 源码 写在 ...

  3. Android笔记之平移View

    方法有多种,只讲一种 使用View.setLeft和View.setRight 对于wrap_content的View,要横向平移,setRight是必要的,否则View的宽度会被改变(right应设 ...

  4. TControl,TWinControl和TGraphicControl的显示函数

    -------------------------- 显示隐藏刷新 -------------------------- TControl = class(TComponent)procedure S ...

  5. Dockder的CS模式:

    Docker的守护进程一直运行, yw1989@ubuntu:~$ ps -ef | grep docker : 就是docxker的守护进程 root : ? :: /usr/bin/dockerd ...

  6. 关于MySQL的information_schema库简单介绍及实际应用

    本文简介 写本文主要是围绕下面几点进行的. 1.information_schema数据库到底是做什么用的? 2.执行alter table 表名 modify column 字段名 类型 这个sql ...

  7. 2016 Al-Baath University Training Camp Contest-1 I. March Rain —— 二分

    题目链接:http://codeforces.com/problemset/gymProblem/101028/I I. March Rain time limit per test 2 second ...

  8. yum的配置文件yum.conf详解

    说明:经过网上抄袭和自己的总结加实验,非常详细,可留作参考. yum的配置一般有两种方式:   一种是直接配置/etc目录下的yum.conf文件, 另外一种是在/etc/yum.repos.d目录下 ...

  9. js里=、== 和===有什么区别?

    说明:该文章是转载后进行修改完善的,望大家有收获. =是赋值运算符,==是关系运算符; ===是全等运算符. ”==”与”===”是不同的,一个是判断值是否相等,一个是判断值及类型是否完全相等.第一个 ...

  10. LoadRunner中两种录制模式的区别

    决定我们成为什么样人的,不是我们的能力,而是我们的选择. ——<哈利-波特与密室> 一.先看看两种模式的设置和录制脚本的区别 设置HTML录制模式: 设置URL录制模式: HTML脚本: ...