T1. 送货

Description

物流公司要用m辆车派送n件货物.货物都包装成长方体,第i件的高度为hi,重量为wi.因为车很小,一辆车上的货物必须垒成一摞.又因为一些不可告人的原因,一辆车上货物的重量在所有重量中大小排名要连续,但载重量却不限.每辆车的样子一模一样,车本身的最高点距地x,车的放货部位与地面平行,且上表面距地y.

一些快速通道有车辆高度限制,工作人员需要事先规划路线,他希望知道,当高度限制大于等于多少时,他有办法让所有货车都通过.

Input Format

第一行两个整数m,n.

第二行两个整数x,y.

第3~n+2行:第i+2行两个整数hi,wi.

Output Format

一个整数,表示答案.

Sample Input

3 5 3 2

1 5

5 4

4 3

2 2

4 1

Sample Output

8

Constraints

对于50%的数据:n,m<=20;

对于100%的数据:n,m<=1e5;0<hi,x,y<=1e5;0<wi<=1e9 且互不相同.

考场心路历程:

哇, 这道题一定是二分。

然后二分写炸。

看了std的标程, 发现很妙, 所以写一篇题解。


好了,solution开始。


这道题的思路:二分最小高度,判定是否可行,最后输出。

#include<bits/stdc++.h>
#define int long long //骚操作
using namespace std;
const int maxn = 100000 + 5;
int n, m, x, y, maxi;
struct node{
int h, w;
}g[maxn];
// node 用来按重量排序
bool cmp(node x, node y){
return x.w < y.w;
}
// 这里用了一点贪心思想, 矮一点的和一起也许可以凑一下尝试在一台货车内填的最多(~~ 玄学解释 ~~)
int sum; // 记录所有货物高度的和(因为你再怎么不好,把所有货物垒在一辆van上总是可以的)
bool pd(int top){
int cnt = 0;//记录当前所用的van
int NOW = 0;//记录当前货物的总高度
for(int i = 1; i <= n; i ++){
if(NOW + g[i].h > top){
//如果垒上这一个货物超过了桥洞
cnt ++;
//换车
NOW = g[i].h;
//车上的高度
} else {
NOW += g[i].h;
//直接垒上
}
}
return cnt < m;
//介于NOW肯定不为零,所以还要加一辆货车。
//可以写成 cnt + 1 <= m
}
signed main(){
// freopen("send.in", "r", stdin);
// freopen("send.out", "w", stdout);
scanf("%lld%lld", &m, &n);
scanf("%lld%lld", &x, &y);
for(int i = 1; i <= n; i ++){
scanf("%lld%lld", &g[i].h, &g[i].w);
}
sort(g + 1, g + 1 + n, cmp);
//输入, 贪心地排序
maxi = -1;
//最高的一件货物为maxi
for(int i = 1; i <= n; i ++){
maxi = max(maxi, g[i].h);
sum += g[i].h;
//更新maxi与sum
}
int l = maxi, r = sum, ans;
//二分下界至少为最大的货物, 上界为所有货物的和
// cout << l << " " << r << endl;
while(l < r){
int mid = l + r >> 1;
if(pd(mid)){
r = mid;
} else {
l = mid + 1;
}
}
//二分过程
printf("%lld", max(x, l + y));
//l + y 加上van的载货平面高度,得和van的本身的高度比一比(加上货都不一定有车高)
return 0;
}

[1]: file:///C:/Users/Administrator/AppData/Local/Microsoft/Windows/Temporary%20Internet%20Files/Content.IE5/6F8NP43S/solution%5B1%5D.pdf

T2 强迫症

Description

小X要给家里的走廊铺地毯.走廊的长度为m,小X买来了n条地毯,地毯的宽度都与走廊宽度相等,但长度不尽相同,第i条地毯长度为ai.小X对第i条地毯有ci的喜爱度.小X对地毯的喜爱度是一个关于地毯长度的固定高次函数.他希望铺上的地毯的喜爱度和最大,但小X有强迫症,他不能容忍地毯间或地毯与墙有任何重叠或缝隙.他需要你告诉他喜爱度和的最大可能值.若无法铺成,则输出-1.

Input Format

第一行两个整数,n和m.

以下有n行,每行两个正整数,表示一条地毯的长度和喜爱度.

Output Format

一行一个数,表示喜爱度和的最大可能值或-1.

Sample Input1

5 20

4 6

10 3

6 5

5 6

5 6

Sample Output1

23

Sample Input2

5 20

2 2

2 2

2 2

2 2

2 2

Sample Output2

-1

Explain for sample1

选出第1,3,4,5条地毯.

Constraints

对于30%的数据:m,n<=1000.

对于100%的数据:不同的长度个数<=2000;m<=10000;n<=2000000.ci<=1000000.ai<=1e9.

Hint

请使用较快的方式读入.

考场心路历程:数据表明肯定是单调队列优化dp(多重背包),30pts暴力做法水过

get30pts成功


solution开始


上面已经提到了,这道题只能单调队列优化

Yali 2019-8-15 test solution的更多相关文章

  1. Data truncation: Incorrect datetime value: 'May 15, 2019 4:15:37 PM

    因为系统在windows下测试过是正常的 windows下的jdk+ windows下安装的mysql 全部cases通过 linux下的jdk + windows下安装的mysql 新增和更新,影响 ...

  2. MyBatis 配置/注解 SQL CRUD 经典解决方案(2019.08.15持续更新)

    本文旨在记录使用各位大神的经典解决方案. 2019.08.14 更新 Mybatis saveOrUpdate SelectKey非主键的使用 MyBatis实现SaveOrUpdate mybati ...

  3. Python脱产8期 Day03 2019/4/15

    一 变量的命名规范 1.只能由 字母, 数字,  _, 组成. 2. 不能以数字开头 3.避免与系统关键字重名:重名不会报错,但系统的功能就被自定义的功能屏蔽掉了(严重不建议这样来做) 4.以_开头的 ...

  4. 纪中OJ 2019.02.15【NOIP提高组】模拟 B 组 梦回三国 比赛题解(第一个)

    声明 旁边的同学小 H(胡)对我说: “哟,比赛拿了 140,强!要知道,如果哥第三题 AC 了,哥就 230 了,你个废柴!!!(比赛实际分数 130 额呵)” 顿时,千万草泥马从我心中奔腾而过:你 ...

  5. 2019.03.15 ZJOI2019模拟赛 解题报告

    得分: \(20+45+15=80\)(三题暴力全写挂...) \(T1\):Lyk Love painting 首先,不难想到二分答案然后\(DP\)验证. 设当前需验证的答案为\(x\),则一个暴 ...

  6. 【2019.8.15 慈溪模拟赛 T1】插头(plugin)(二分+贪心)

    二分 首先,可以发现,最后的答案显然满足可二分性,因此我们可以二分答案. 然后,我们只要贪心,就可以验证了. 贪心 不难发现,肯定会优先选择能提供更多插座的排插,且在确定充电器个数的情况下,肯定选择能 ...

  7. 【2019.8.15 慈溪模拟赛 T2】组合数(binom)(卢卡斯定理+高维前缀和)

    卢卡斯定理 题目中说到\(p\)是质数. 而此时要求组合数向质数取模的结果,就可以用卢卡斯定理: \[C_x^y=C_{x\ div\ p}^{y\ div\ p}\cdot C_{x\ mod\ p ...

  8. 【2019.7.15 NOIP模拟赛 T2】与非树(nand)(树形DP)

    树形\(DP\) 实际上,这道题应该不是很难. 我们设\(f_{x,i,j}\)表示在以\(x\)为根的子树内,原本应输出\(i\),结果输出了\(j\)的情况数. 转移时,为了方便,我们先考虑与,再 ...

  9. 【2019.7.15 NOIP模拟赛 T1】夹缝(mirror)(思维题)

    思维题 此题应该是比较偏思维的. 假设一次反射后前进的距离是\(2^x(2y+1)\),则显然,它可以看做是前进距离为\(2^x\)的光线经过了\((2y+1)\)次反射,两者是等价的,甚至后者可能还 ...

  10. 第十八次CSP认证游记 | 2019.12.15

    CSP认证的考试是Haogod介绍的,取得一定成绩之后能有机会参加CCSP的分赛区和全国决赛.这次来参加认证要感谢老师的奔走为我们申请学校的报销,虽然最终因为这不是比赛所以报名费和差旅费下不来,但是老 ...

随机推荐

  1. Spring学习-spring核心机制-IOC依赖注入

    转载自:http://www.cnblogs.com/chenssy/archive/2012/11/11/2765266.html 今天复习一下spring两大特性之一:IOC依赖注入,看了一下大佬 ...

  2. Django项目登录注册系统

    Django项目之个人网站 关注公众号"轻松学编程"了解更多. Github地址:https://github.com/liangdongchang/MyWeb.git 感兴趣的可 ...

  3. 【SpringBoot】15. Spring Boot核心注解

    Spring Boot核心注解 1 @SpringBootApplication 代表是Spring Boot启动的类 2 @SpringBootConfiguration 通过bean对象来获取配置 ...

  4. NodeJs 加入Windows开机自启动服务

    首先需要到http://nssm.cc/download/?page=download 下载 nssm,下下来之后是压缩包形式的解压之后,在命令行模式下进入到nssm的目录.之后运行:nssm ins ...

  5. 5、Django之模板层

    一 模板简介 在刚刚介绍完的视图层中我们提到,浏览器发送的请求信息会转发给视图函数进行处理,而视图函数在经过一系列处理后必须要有返回信息给浏览器.如果我们要返回html标签.css等数据给浏览器进行渲 ...

  6. ERP的主数据的操作与设计--开源软件诞生25

    赤龙ERP主数据管理讲解--第25篇 用日志记录"开源软件"的诞生 [进入地址 点亮星星]----祈盼着一个鼓励 博主开源地址: 码云:https://gitee.com/redr ...

  7. epoll内核源码详解(转 作者:赛罗·奥特曼 来源:牛客网)

    发现自己发的一篇面经后,很多小伙伴向我索要epoll的内核源码实现,那我就在牛客网发下这源码还有自己总结的流程. 另外 网上很多博客说epoll使用了共享内存,这个是完全错误的 ,可以阅读源码,会发现 ...

  8. C++ Split string into vector<string> by space(转)

    c++中没有这么方便的实现,但也有很多的方法能实现这个功能,下面列出五种常用的实现的方法,请根据需要选择,个人觉得前三种使用起来比较方便,参见代码如下: #include <vector> ...

  9. 用GitHub Pages搭建博客(五)

    本篇介绍GitHub Pages自定义域名 在用GitHub Pages搭建博客(二)中介绍到,默认的GitHub Pages域名就是仓库地址,即: 账号名.github.io 如果我们要使用自定义域 ...

  10. 《GNU_makefile》第六章——变量

    makefile中的变量特征和C语言中的宏一样. 变量使用 =,:=,?= 和 define 定义 一些特殊的自动化变量:$< $@ $^ $* 1.变量的引用 通过 $(VAR) 或 ${VA ...