P1233 木棍加工

题目描述

一堆木头棍子共有n根,每根棍子的长度和宽度都是已知的。棍子可以被一台机器一个接一个地加工。机器处理一根棍子之前需要准备时间。准备时间是这样定义的:

第一根棍子的准备时间为1分钟;

如果刚处理完长度为L,宽度为W的棍子,那么如果下一个棍子长度为Li,宽度为Wi,并且满足L>=Li,W>=Wi,这个棍子就不需要准备时间,否则需要1分钟的准备时间;

计算处理完n根棍子所需要的最短准备时间。比如,你有5根棍子,长度和宽度分别为(4, 9),(5, 2),(2, 1),(3, 5),(1, 4),最短准备时间为2(按(4, 9)、(3, 5)、(1, 4)、(5, 2)、(2, 1)的次序进行加工)。

输入输出格式

输入格式:

第一行是一个整数n(n<=5000),第2行是2n个整数,分别是L1,W1,L2,w2,…,Ln,Wn。L和W的值均不超过10000,相邻两数之间用空格分开。

输出格式:

仅一行,一个整数,所需要的最短准备时间。

输入输出样例

输入样例#1:

5
4 9 5 2 2 1 3 5 1 4

输出样例#1:

2

思路

一般来说,数据较大,要求顺序时,要优先考虑贪心(当然,也有可能是动态规划或其他算法,这并不绝对)。

根据题意,最终答案中1min准备后能一次处理的木棍L、W非严递减。我们可以考虑以L为关键字进行降序排序,然后在W中进行类似于“导弹拦截”这道经典题的操作,也就是用最少的装置防御最多的导弹(请自行类比 导弹拦截 具体原因不再赘述)。

总结一下,就是将L降序排序,然后求最长不下降子序列。

废话不多说,直接上代码。

代码

#include<bits/stdc++.h>
using namespace std;
#define MAXN 5005 struct ppp{
int L, W;
}a[MAXN]; bool cmp( ppp x, ppp y ){
return x.L > y.L;
} int n;
int f[MAXN], tot; void Add( int x ){
int l(1), r(tot), mid, ans(-1);
while( l <= r ){
mid = ( l + r ) >> 1;
if ( f[mid] >= x ){
r = mid - 1; ans = mid;
} else l = mid + 1;
}
if ( ans == -1 ) f[++tot] = x;
else f[ans] = x;
} int main(){
scanf( "%d", &n );
for ( int i = 1; i <= n; ++i ) scanf( "%d%d", &a[i].L, &a[i].W );
sort( a + 1, a + n + 1, cmp );
f[++tot] = a[1].W;
for ( int i = 2; i <= n; ++i ) Add( a[i].W );
printf( "%d\n", tot );
return 0;
}

2018/11/26修改为Markdown格式

「洛谷P1233」木棍加工 解题报告的更多相关文章

  1. 「洛谷P1262」间谍网络 解题报告

    P1262 间谍网络 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他们就愿意 ...

  2. 「洛谷P1198」 [JSOI2008]最大数 解题报告

    P1198 [JSOI2008]最大数 题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制: ...

  3. 「洛谷P3469」[POI2008]BLO-Blockade 解题报告

    P3469[POI2008]LO-Blockade 题意翻译 在Byteotia有n个城镇. 一些城镇之间由无向边连接. 在城镇外没有十字路口,尽管可能有桥,隧道或者高架公路(反正不考虑这些).每两个 ...

  4. 「洛谷P1402」酒店之王 解题报告

    P1402 酒店之王 题目描述 XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的房间色调.阳光等,也有自己所爱的菜,但是该酒店只有p间房间,一天只 ...

  5. 「洛谷P1343」地震逃生 解题报告

    P1343 地震逃生 题目描述 汶川地震发生时,四川XX中学正在上课,一看地震发生,老师们立刻带领x名学生逃跑,整个学校可以抽象地看成一个有向图,图中有n个点,m条边.1号点为教室,n号点为安全地带, ...

  6. 「区间DP」「洛谷P1043」数字游戏

    「洛谷P1043」数字游戏 日后再写 代码 /*#!/bin/sh dir=$GEDIT_CURRENT_DOCUMENT_DIR name=$GEDIT_CURRENT_DOCUMENT_NAME ...

  7. 洛谷_Cx的故事_解题报告_第四题70

    1.并查集求最小生成树 Code: #include <stdio.h> #include <stdlib.h>   struct node {     long x,y,c; ...

  8. 洛谷 P1233 木棍加工 解题报告

    P1233 木棍加工 题目描述 一堆木头棍子共有n根,每根棍子的长度和宽度都是已知的.棍子可以被一台机器一个接一个地加工.机器处理一根棍子之前需要准备时间.准备时间是这样定义的: 第一根棍子的准备时间 ...

  9. 「洛谷4197」「BZOJ3545」peak【线段树合并】

    题目链接 [洛谷] [BZOJ]没有权限号嘤嘤嘤.题号:3545 题解 窝不会克鲁斯卡尔重构树怎么办??? 可以离线乱搞. 我们将所有的操作全都存下来. 为了解决小于等于\(x\)的操作,那么我们按照 ...

随机推荐

  1. uva 10566 Crossed Ladders (二分)

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...

  2. 给博客添加rss订阅

    如果是自己搭建博客,有一个问题是如何写一篇新的文章就可以告诉读者,你写了一篇新的?一个简单方法是使用 rss ,RSS订阅是站点用来和其他站点之间共享内容的一种简易方式,即Really Simple ...

  3. 在phpstudy中nginx伪静态配置

    ########################### #以下是虚拟主机配置 server { listen 80; server_name hzym.com; root "D:\phpst ...

  4. iptables禁止代理端口

    #iptables -A INPUT -p tcp --dport 3128 -j REJECT

  5. Activiti 工作流入门指南

    概览 如我们的介绍部分所述,Activiti目前分为两大类: Activiti Core Activiti Cloud 如果你想上手Activiti的核心是否遵循了新的运行时API的入门指南:Acti ...

  6. 打开phpstorm 的terminal 工具框的快捷键 alt+F12

    打开phpstorm 的terminal 工具框的快捷键 alt+F12 Alt + #[0-9] 打开相应的工具窗口

  7. H3C 常用的IPv6地址类型及格式

  8. H3C DHCP系统组成

  9. linux一个进程如何睡眠

    如果我们深入 <linux/wait.h>, 你见到在 wait_queue_head_t 类型后面的数据结构是非 常简单的; 它包含一个自旋锁和一个链表. 这个链表是一个等待队列入口, ...

  10. 【74.00%】【codeforces 747A】Display Size

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...