洛谷 P1233 木棍加工 解题报告
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,相邻两数之间用空格分开。
输出格式:
仅一行,一个整数,所需要的最短准备时间。
感觉其实有点像x维偏序问题哈
先排序一维消除这一维的影响
排序后,对另一维其实就是用很多个不上升子序列覆盖,求最小覆盖数。
可以直接贪心\(n^2\)做,但借助Dilworth定理我们可以得到把这个最小覆盖数转化成LIS问题
Dilworth定理太难了只好记下结论,对此题最小覆盖数即等于最长上升子序列
\(dp[i]\)代表长度为\(i\)的最长上升子序列末尾的最小值,每次伸长末尾或者二分查找更新某一位的最小值
Code:
#include <cstdio>
#include <algorithm>
using namespace std;
const int N=5010;
pair <int,int > dx[N];
int dp[N],n;
bool cmp(pair <int,int> n1,pair <int ,int > n2)
{
    if(n1.first==n2.first) return n1.second>n2.second;
    return n1.first>n2.first;
}
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d%d",&dx[i].first,&dx[i].second);
    sort(dx+1,dx+1+n,cmp);
    int r=0;
    for(int i=1;i<=n;i++)
    {
        if(dp[r]<dx[i].second) dp[++r]=dx[i].second;
        else
        {
            int pos=lower_bound(dp,dp+r+1,dx[i].second)-dp;
            dp[pos]=dx[i].second;
        }
    }
    printf("%d\n",r);
    return 0;
}
2018.7.24
洛谷 P1233 木棍加工 解题报告的更多相关文章
- 洛谷 P1233 木棍加工
		题目描述 一堆木头棍子共有n根,每根棍子的长度和宽度都是已知的.棍子可以被一台机器一个接一个地加工.机器处理一根棍子之前需要准备时间.准备时间是这样定义的: 第一根棍子的准备时间为1分钟: 如果刚处理 ... 
- 洛谷P1233 木棍加工【单调栈】
		题目:https://www.luogu.org/problemnew/show/P1233 题意: 有n根木棍,每根木棍有长度和宽度. 现在要求按某种顺序加工木棍,如果前一根木棍的长度和宽度都大于现 ... 
- 洛谷P1233 [木棍加工]
		主要思路: 这道题一眼看过去就可以贪心.. 首先可以按L排序.. 显然排序之后我们就可以抛开L不管了.. 然后就可以愉快的贪心了.. 细节: 这道题可以看成用 最少的合法序列(详见原题) 装下所有木棍 ... 
- 洛谷P1233 木棍加工题解 LIS
		突然发现自己把原来学的LIS都忘完了,正好碰见这一道题.|-_-| \(LIS\),也就是最长上升子序列,也就是序列中元素严格单调递增,这个东西有\(n^{2}\)和\(nlog_{2}n\)两种算法 ... 
- 洛谷 P1233 木棍加工 题解
		题面 Dilworth定理:在数学理论中的序理论与组合数学中,Dilworth定理根据序列划分的最小数量的链描述了任何有限偏序集的宽度. 反链是一种偏序集,其任意两个元素不可比:而链则是一种任意两个元 ... 
- 「洛谷P1233」木棍加工 解题报告
		P1233 木棍加工 题目描述 一堆木头棍子共有n根,每根棍子的长度和宽度都是已知的.棍子可以被一台机器一个接一个地加工.机器处理一根棍子之前需要准备时间.准备时间是这样定义的: 第一根棍子的准备时间 ... 
- 洛谷 P1783 海滩防御 解题报告
		P1783 海滩防御 题目描述 WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和仓库总是被敌方派人偷袭 ... 
- 洛谷 P4597 序列sequence 解题报告
		P4597 序列sequence 题目背景 原题\(\tt{cf13c}\)数据加强版 题目描述 给定一个序列,每次操作可以把某个数\(+1\)或\(-1\).要求把序列变成非降数列.而且要求修改后的 ... 
- 洛谷1087 FBI树 解题报告
		洛谷1087 FBI树 本题地址:http://www.luogu.org/problem/show?pid=1087 题目描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全 ... 
随机推荐
- Qt-QML-电子罗盘
			使用QML中的Canvas实现电子罗盘绘制,效果图如下 一个简单的电子罗盘,红色N极.其中中间飞机表示当前的指向, 还是比较简单的,直接上代码吧 /* 作者:张建伟 时间:2018年4月27日 简述: ... 
- 使用GitLab创建项目
- Spark Shell Examples
			Spark Shell Example 1 - Process Data from List: scala> val pairs = sc.parallelize( List( ("T ... 
- ZOJ 3962
			就是统计1~n中出现的各个数字的次数,当然是在16进制下. 不过有个区间问题的小技巧,统计从 [x,y] 可以转换成 从 [1,y] 减去 [1,x-1]. 不过要分类讨论一下,因为有可能会出现溢出, ... 
- mariadb BINLOG_FORMAT = STATEMENT 异常
			当在mariadb中插入数据是报 InnoDB is limited to row-logging 异常: java.sql.SQLException: Cannot execute statemen ... 
- Tempter of the Bone HDU 1010(DFS+剪枝)
			Problem Description The doggie found a bone in an ancient maze, which fascinated him a lot. However, ... 
- “Hello World!”团队召开的第六次会议
			团队“Hello World!”团队召开的第六次会议. 博客内容: 一.会议时间 二.会议地点 三.会议成员 四.会议内容 五.Todo List 六.会议照片 七.燃尽图 一.会议时间 2017年1 ... 
- c# 画一个报告
			填充控件的grafics属性: private void printReportPage(object sender, System.Drawing.Printing.PrintPageEventAr ... 
- “我爱淘”第二冲刺阶段Scrum站立会议3
			完成任务: 完成了注册界面的设计,以及部分代码,但是还没有完成服务器端的添加功能. 计划任务: 将注册功能实现了它,可以对数据库进行添加,在客户端实现分类功能,通过学院的分类查看书籍. 遇到问题: 分 ... 
- C++总结作业
			在博客作业中学到的内容 在博客作业中,首先我学到了Markdown编辑器的排版格式,github的上传,如果没有博客作业,可能根本不会接触到这些内容.然后,就C++来讲,我在博客作业中学会了命令行参数 ... 
