链接

二分时间,在时间内dp[i][j]表示截止到第i个人已经做了j个A最多还能做多少个B

#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
#include<vector>
#include<cmath>
#include<queue>
#include<set>
using namespace std;
#define N 200000
#define LL long long
#define INF 0xfffffff
const double eps = 1e-;
const double pi = acos(-1.0);
const double inf = ~0u>>;
int a[],b[];
int dp[][];
int main()
{
int n,i,j,t,x,y,g,kk=;
cin>>t;
while(t--)
{
scanf("%d%d%d",&n,&x,&y);
int minz = N;
for(i = ; i <= n ;i++)
{
scanf("%d%d",&a[i],&b[i]);
minz = min(minz,a[i]*x+b[i]*y);
}
int low = ,high = minz,mid;
while(low<=high)
{
mid = (low+high)>>;
memset(dp,-,sizeof(dp));
for(i = ; i <= x ; i++)
{
if(a[]*i<=mid)
dp[][i] = (mid-a[]*i)/b[];
}
for(i = ; i <= n ;i++)
{
for(j = ;j <= x ;j++)
for(g = ; g <= x-j ; g++)
{
if(mid<a[i]*j) break;
if(dp[i-][g]==-) break;
dp[i][j+g] = max(dp[i][j+g],(mid-a[i]*j)/b[i]+dp[i-][g]);
}
}
if(dp[n][x]>=y)
high = mid-;
else
low = mid+;
}
printf("Case %d: ",++kk);
cout<<low<<endl;
}
return ;
}

最新文章

  1. NYOJ214
  2. SQL语句方法语法总结(三)
  3. codeforces 631A Interview
  4. 解决phpmyadmin-1800秒超时链接失效问题
  5. Mongodb 上传图片
  6. 应用控制台应用程序开发批量导入EXEL程序。
  7. Java类加载器详解
  8. Scikit-learn:scikit-learn快速教程及实例
  9. hadoop伪分布式搭建
  10. jquery/js知识点收藏
  11. 学习Struts--Chap05:值栈和OGNL
  12. 常用http/https以及socks5代理总结
  13. 浅谈ES6原生Promise
  14. Linux 基础一(系统分区、格式化与挂载)
  15. Spring Boot MyBatis升级篇-注解-动态SQL(if test)-方案二:@Provider(8)
  16. Windows操作系统下SVN无法上传*.o文件
  17. visual studio 各种错误汇总
  18. 基于easyui开发Web版Activiti流程定制器详解(五)——Draw2d详解(一)
  19. (一)ElasticSearch-入门
  20. vector的哈希值 Codecraft-17 and Codeforces Round #391 (Div. 1 + Div. 2, combined) C

热门文章

  1. Android开发pool解析xml
  2. C 编程中fseek、ftell的用法总结
  3. Trie(前缀树)和ternary trie和binary search tree
  4. form之action的绝对路径与相对路径(转载)
  5. qemu所支持的网卡
  6. H5的localStorage简单存储删除
  7. java语法基础(二)
  8. XMU 1606 nc与滴水问题 【模拟】
  9. mysql05---游标
  10. evm指令集手册