传送门

老师良心推荐的二分题。7月29号第一次写,想到了裸的DP,乱搞搞过了6组,欲优化,无解,弃疗。

然后今天老师给了题解,简单看了一下。

正解是二分答案+DP验证。

二分天数$day$,然后对于每次二分出的$day$,设$f[i][j]$表示对于前$i$个人,完成$j$份A工作时可以完成的最多的$B$工作。

这个的状态转移方程很好写出:

$f[i][j]=max \left\{f[i-1][j-d/a[i].first]+(day-d)/a[i].second \right\}$

$ 0\leq d \leq day$

具体实现:

 //OJ 1817
 //by Cydiater
 //2016.9.22
 #include <iostream>
 #include <cstdio>
 #include <cstring>
 #include <string>
 #include <algorithm>
 #include <queue>
 #include <map>
 #include <ctime>
 #include <cmath>
 #include <cstdlib>
 #include <iomanip>
 using namespace std;
 #define ll long long
 #define up(i,j,n)        for(int i=j;i<=n;i++)
 #define down(i,j,n)        for(int i=j;i>=n;i--)
 #define pii pair<int,int>
 ;
 const int oo=0x3f3f3f3f;
 inline int read(){
     ,f=;
     ;ch=getchar();}
     +ch-';ch=getchar();}
     return x*f;
 }
 pii a[MAXN];
 int N,M,leftt,rightt,mid,f[MAXN][MAXN];
 namespace solution{
     inline pii get(){
         int x,y;
         x=read();y=read();
         return make_pair(x,y);
     }
     void init(){
         N=read();M=read();
         up(i,,N)a[i]=get();
     }
     bool check(int day){
         memset(f,-,sizeof(f));
         f[][]=;
         up(i,,N)up(j,,M)up(d,,day)if(j*a[i].first>=d)
         f[i][j]=max(f[i][j],f[i-][j-d/a[i].first]+(day-d)/a[i].second);
         return f[N][M]>=M;
     }
     int slove(){
         leftt=;rightt=;
         <rightt){
             mid=(leftt+rightt)>>;
             if(check(mid))        rightt=mid;
             else                leftt=mid;
         }
         if(check(leftt))    return leftt;
         return rightt;
     }
 }
 int main(){
     //freopen("input.in","r",stdin);
     using namespace solution;
     init();
     printf("%d\n",slove());
     ;
 }

JZOJ P1817:[8.27]研究性学习作业的更多相关文章

  1. Java学习作业(14.4.21)

    前三次作业都是基础语法.真的好水啊.从这次开始记录. 1.编写Java程序,把当前目录下扩展名为txt的文件的扩展名全部更名为back. import java.io.*; import java.l ...

  2. java第一天学习作业及答案

    作业一 一.选择题 1.选出在java中有效的注释声明(AD)(选两项) A.//这是注释 B.*/这是注释*/ C./这是注释 D./*这是注释*/ 2.在控制台运行一个java程序,使用的命名正确 ...

  3. JobClient学习------作业提交与初始化

    public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); ...

  4. C# 一些学习作业

    下载地址:http://pan.baidu.com/s/1dEGCJdf 包括: 实现QQ旋转窗体功能 非“按角度旋转”,实现的是立体旋转. 实现QQ旋转窗体功能,窗口为不规则图像,打开时旋转180度 ...

  5. Linux(9.21-9.27)学习笔记

    一.Vim的基本操作. Normal模式下 1.h 键 向左移动光标   2.  j  键  向下移动光标   3. k 键 向上移动光标 4. l键  向右移动光标 5.x 键  删除光标所在位置的 ...

  6. 编写C函数的技术-《lua程序设计》 27章 学习

    1.数组操作 void lua_rawgeti(lua_State * L ,int index,int key) void lua_rewseti(lua_State * L,int index,i ...

  7. python之02数据类型学习-作业练习2

    引用博客地址:http://www.cnblogs.com/yuanchenqi/articles/5782764.html 作业描述: 省 市 县的三层数据通过字典 元祖 列表 保存起来执行程序后 ...

  8. python之02数据类型学习-作业练习

    题目: 购物车程序 salary = 5000 1. iphone6s 5800 2. mac book 9000 3. coffee 32 4. python book 80 5. bicyle 1 ...

  9. 2020/1/27代码审计学习之SQL注入漏洞

    PHP代码审计SQL注入漏洞 0x00 首先明确什么是SQL注入,SQL语句必须掌握. 常见的注入总的来说可以分为两大类:数字型和字符型. 这两类中包含了诸如报错注入,宽字节注入,盲注,二次注入,co ...

随机推荐

  1. UWP开源项目 LLQNotifier 页面间通信利器(移植EventBus)

    前言 EventBus是一个Android版本的页面间通信库,这个库让页面间的通信变得十分容易且大幅降低了页面之间的耦合.小弟之前玩Android的时候就用得十分顺手,现在玩uwp就觉得应该在这平台也 ...

  2. HTML5+JS 《五子飞》游戏实现(三)页面和棋盘棋子

    前面两节,我们已经对<五子飞>有个初步的认识,对走棋路线也有了基本的了解,现在里沃特继续跟大家分享HTML页面,另外把棋盘棋子也画出来. 演示地址:http://www.lyout.com ...

  3. 搭建emacs的go编程语言环境

    关于emacs就不说明了,直接切入主题.关于我的emacs配置,可以直接参考GitHub上的lienhua34/myemacs-conf. go-mode 安装 关于go-mode的安装,可以直接参考 ...

  4. mysql full text全文索引必要条件

    show variables like 'ft_m%' 'ft_max_word_len', '84''ft_min_word_len', '4' 对于英文来说, ft_min_word_len=4是 ...

  5. 关于提高python程序执行效率的思路和想法

    相比编译型语言(C系列)python胜在简介的语法和优雅的动态编程体验,但是在执行效率上,python有解释性语言先天的劣势——执行效率较低,为了让编写出的程序获得更快的执行效率,开启此文章. pyt ...

  6. jqMobile中pageinit,pagecreate,pageshow等函数的执行顺序

    常见的共有5个page函数,刚开始有点迷糊的是到底谁先谁后执行. 实验告诉我们结果: var temp = ''; $('body').live('pagechange', function () { ...

  7. impdp导入时卡死分析方法

    来源于: http://blog.csdn.net/yfleng2002/article/details/7973997 http://www.cnblogs.com/songling/archive ...

  8. mysql常用方法学习

    环境 create table phople ( id int(11) not null primary key auto_increment, name char(20) not null, sex ...

  9. SELinux关闭和开启

    检测Selinux状态 ./usr/sbin/sestatus -v ##如果SELinux status参数为enabled即为开启状态 SELinux status: enabled .geten ...

  10. SPSS 统计图形

    统计图能够简洁.直观地对主要的数据信息进行呈现,反映事物内在的规律和关联.当然难免会丢失数据的细节,鱼与熊掌不可兼得. 根据统计图呈现变量的数量将其分为单变量图.双变量图.多变量图,然后再根据测试尺度 ...