JZOJ P1817:[8.27]研究性学习作业

传送门

老师良心推荐的二分题。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$

具体实现:

 1 //OJ 1817
 2 //by Cydiater
 3 //2016.9.22
 4 #include <iostream>
 5 #include <cstdio>
 6 #include <cstring>
 7 #include <string>
 8 #include <algorithm>
 9 #include <queue>
10 #include <map>
11 #include <ctime>
12 #include <cmath>
13 #include <cstdlib>
14 #include <iomanip>
15 using namespace std;
16 #define ll long long
17 #define up(i,j,n)        for(int i=j;i<=n;i++)
18 #define down(i,j,n)        for(int i=j;i>=n;i--)
19 #define pii pair<int,int>
20 const int MAXN=105;
21 const int oo=0x3f3f3f3f;
22 inline int read(){
23     char ch=getchar();int x=0,f=1;
24     while(ch>‘9‘||ch<‘0‘){if(ch==‘-‘)f=-1;ch=getchar();}
25     while(ch>=‘0‘&&ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();}
26     return x*f;
27 }
28 pii a[MAXN];
29 int N,M,leftt,rightt,mid,f[MAXN][MAXN];
30 namespace solution{
31     inline pii get(){
32         int x,y;
33         x=read();y=read();
34         return make_pair(x,y);
35     }
36     void init(){
37         N=read();M=read();
38         up(i,1,N)a[i]=get();
39     }
40     bool check(int day){
41         memset(f,-10,sizeof(f));
42         f[0][0]=0;
43         up(i,1,N)up(j,0,M)up(d,0,day)if(j*a[i].first>=d)
44         f[i][j]=max(f[i][j],f[i-1][j-d/a[i].first]+(day-d)/a[i].second);
45         return f[N][M]>=M;
46     }
47     int slove(){
48         leftt=1;rightt=100;
49         while(leftt+1<rightt){
50             mid=(leftt+rightt)>>1;
51             if(check(mid))        rightt=mid;
52             else                leftt=mid;
53         }
54         if(check(leftt))    return leftt;
55         return rightt;
56     }
57 }
58 int main(){
59     //freopen("input.in","r",stdin);
60     using namespace solution;
61     init();
62     printf("%d\n",slove());
63     return 0;
64 }

时间: 2024-11-03 22:39:02

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

Java学习作业(14.4.21)

前三次作业都是基础语法.真的好水啊.从这次开始记录. 1.编写Java程序,把当前目录下扩展名为txt的文件的扩展名全部更名为back. 1 import java.io.*; 2 import java.lang.*; 3 4 5 public class Home { 6 7 public void reName(String path, String from, String to) { 8 File f = new File(path); //声明File对象,用于导入修改路径 9 Fi

2016年大学生研究性学习和创新性实验计划项目 我的项目 :二维码数据反馈系统 第四周作业

参加软件班后介于一直没有实训的机会,感觉自己应该主动找点项目,提升自己的技术水平,这次在老师和同学的帮助下参加了2016年大学生研究性学习和创新性实验计划项目: 下面是我参与的项目的一些简介: 项目名:二维码数据反馈系统    简述:二维码具有面积小,信息容量大,安全性高,读取率高,纠错能力强等优点,不仅能够存储足够的物品信息,还具有抗干扰能力强.运用环境适应性好.使用成本低廉等优点, 现今成为各种产品  防伪的首要选择.        项目的创新点和特色 :传统的生产厂商通过条形码来记录商品信

OLDBOY 27期学习目标

余于27期学习老男孩周末班,将做到一下几点,目标月薪15K 课前预习,课后总结 每天不低于三小时学习 将每次作业做为自己复习材料 善于总结工作学习中问题 不耻下问,直到明白 课上不乱纪违规 帮助其它同学讲解问题,提升自己 多和同学讨论学习技巧 学习技能的同时提高个人的素质 按时完成老师安排的任务 奖励:买一部新手机 惩罚:为慈善捐助1000元

2015年8月27日课程作业(文件权限管理及grep正则和扩展正则表达式)-JY1506402-19+liuhui880818

学习内容:文件权限管理及grep正则和扩展正则表达式 系统环境:CentOS 6.7/7 x86_64 一.作业(练习)内容: 1.总结本此课程中所涉及命令的使用方法及相关示例展示: 2.总结基本正则表达式及扩展正则表达式 3.显示/etc/passwd文件中以bash结尾的行 4.显示/etc/passwd文件中的两位数或三位数 5.显示`netstat -tan`命令结果中以'LISTEN'后跟0个.1个或者多个空白字符结尾的行 6.添加用户bash.testbash.basher以及nol

linux学习作业-第八周

本周作业内容: 1.请描述网桥.集线器.二层交换机.三层交换机.路由器的功能.使用场景与区别. 网桥是早期的两端口二层网络设备,用来连接不同网段.网桥的两个端口分别有一条独立的交换信道,不是共享一条背板总线,可隔离冲突域. 与交换机一样可以隔离冲突域,可只有2个端口,交换机可有多个比集线器接口数少,无路由功能 集线器 是指将多条以太网双绞线或光纤集合连接在同一段物理介质下的设备.集线器是运作在OSI模型中的物理层.它可以视作多端口的中继器,若它侦测到碰撞,它会提交阻塞信号.无路由功能.不可隔离冲

linux学习-作业1

利用echo命令显示排列小星星 \033:表示十六进制的ASCII.4:背景颜色.31:字体颜色 .5:闪烁 .n:下一行         编码            颜色/动作          0           重新设置属性到缺省设置          1           设置粗体          2           设置一半亮度(模拟彩色显示器的颜色)          4           设置下划线(模拟彩色显示器的颜色)          5           设

马哥运维学习作业(二)

1.Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示. 答:文件管理类命令有:cp,mv,rm cp 命令功能:将一个或多个源文件或目录复制到指定的目标文件或目录 命令格式: cp [OPTION]... [-T] SOURCE DEST      //cp [选项]-[-T]源目的 cp [OPTION]... SOURCE... DIRECTORY   // cp [选项]-源-目录 cp [OPTION]... -t DIRECTORY SOURCE...  // c

linux运维实战练习-2015年8月27日课程作业

基本正则表达式 grep命令 一.总结: grep, egrep, fgrep 分两类: 基本正则表达式:BRE 扩展正则表达式:ERE 1.grep:Global search REgular expression and Print out the line. 作用:文本搜索工具,根据用户指定的"模式(pattern)"逐行去搜索目标文本,打印匹配到的     行:PATTERN:是文本字符和正则表达式的元字符组合而成的匹配条件,可用单引号' '将pattern括   起来以避免s

Python学习作业之登陆接口_For

作业:编写登陆接口 要求: 输入正确则显示欢迎信息,输入错误三次则锁定. # Author:Bryce_Zhang username = "1" password = "2" for i in range(4):     users = input("users:")     pass1 = input("pass1:")     if users == username and pass1 == password: