ZOJ1025-最长下降子序列
ZOJ1025-Wooden Sticks 加工木棒问题
【问题描述】
现有n根木棒,已知它们的长度和重量。要用一部木工机一根一根地加工这些木棒。该机器在加工过程中需要一定的准备时间用于清洗机器、调整工具和模板。
木工机需要的准备时间如下:
(1) 第一根木棒需要1min的准备时间;
(2) 在加工了一根长为l,重为w的木棒后,接着加工一根长为l’(l≤l’),
重为w’(w≤w’)的木棒是不需要任何准备时间的,否则需要1min的准备时间。
给定n根木棒,你要找到最少的准备时间。例如现在有长度和重量分别为(4,9)、(5,2)、(2,1)、(3,5)和(1,4)的5根木棒,那么所需准备时间最少为2min,顺序为(1,4)-》(3,5)-》(4,9)-》(2,1)-》(5,2)。
【输入】
输入有多组测试例。输入数据的第一行是测试例的个数T。
每个测试例两行:
第一行是一个整数n(1≤n≤5000),表示有多少根木棒;
第二行包括n×2个整数,表示l1,w1,l2,w2,l3,w3,…,ln,wn,全部不大于10000,其中li和wi表示第i根木棒的长度和重量。
数据由一个或多个空格分隔。
【输出】
输出是以分钟为单位的最少准备时间,一行对应一个测试例。
【输入样例】
3
5
4 9 5 2 2 1 3 5 1 4
3
2 2 1 1 2 2
3
1 3 2 2 3 1
【输出样例】
2
1
3
思路:
拿分析的样例来看,直接想到了离散上的偏序集,但只是想到了,不知道该怎么解。。。
看了下题解有了思路。先通过一轮cmp构造的排序,将问题进行转化——按照每个棒子的长度从小到大进行排序,然后得到基于棒子长度从小到大排序的棒子重量数组,将这个数组提取到w中保存,或者你不提出来也行,我就是为了方便,我称之为空间换简洁。
然后我们在把2维的偏序关系降到1维后(对,这个题就是降维打击:),就发现现在问题已经转换成了求w数组的最长上升子序列的最小个数,而这个问题,可以再次转换成求w数组的最长递减子序列的长度。后者的转换很容易理解,比如这个数组w的最长递减子序列的长度为5,那这5个值肯定各自在一个独立的最长上升子序列中。
两行大概就把问题的核心说清了,然后coding
#include <iostream>
#include <cstring>
#include <algorithm>
#define N 5007
using namespace std; int n,T;
struct stick{
int l,w;
} sticks[N];
int w[N];
int dp[N]; bool cmp(stick a,stick b)
{
if(a.l == b.l)
return a.w < b.w;
else if(a.l < b.l)
return true;
return false;
} int LIS(int* w)
{
int j;//j为当前最大结束点的坐标
dp[j=] = w[];
for(int i = ;i <= n;i++)
{
if(w[i] < dp[j])
dp[++j] = w[i];
else if(w[i] == dp[j]) continue;
else {
for(int k = j;k >= ;k--)
{
if(k == )
dp[] = w[i]>dp[]?w[i]:dp[];
//找到所有“合适”的位置
if(w[i]>dp[k] && w[i]<dp[k-])
dp[k] = w[i];
}
}
}
return j;
} int main()
{
cin>>T;
while(T--)
{
cin>>n;
int ans = ;
for(int i = ;i <= n;i++)
cin>>sticks[i].l>>sticks[i].w;
sort(sticks+,sticks++n,cmp);
for(int i = ;i <= n;i++)
w[i] = sticks[i].w;
cout<<LIS(w)<<endl;
}
return ;
}
ZOJ1025-最长下降子序列的更多相关文章
- 最长下降子序列O(n^2)及O(n*log(n))解法
求最长下降子序列和LIS基本思路是完全一样的,都是很经典的DP题目. 问题大都类似于 有一个序列 a1,a2,a3...ak..an,求其最长下降子序列(或者求其最长不下降子序列)的长度. 以最长下降 ...
- BUY LOW, BUY LOWER_最长下降子序列
Description The advice to "buy low" is half the formula to success in the bovine stock mar ...
- 【最长下降子序列】【动态规划】【二分】XMU 1041 Sequence
题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1041 题目大意: 一个二维平面,上面n(n<=1 000 000)个点.问至少选 ...
- 【最长下降子序列的长度和个数】 poj 1952
转自http://blog.csdn.net/zhang360896270/article/details/6701589 这题要求最长下降子序列的长度和个数,我们可以增加数组maxlen[size] ...
- POJ-1887 Testing the CATCHER(dp,最长下降子序列)
Testing the CATCHER Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 16515 Accepted: 6082 ...
- ZZNU 1719(最长上升子序列+最长下降子序列)
先吐血一发,噗! 再吐血一次,啊啊啊啊! 好吧,做了那么多次最长上升子序列,看这题看了半天才发现还有最长下降子序列,呵呵哒! AC代码: #include<stdio.h>//老恶心#in ...
- HDOJ(1069)最长下降子序列
每个箱子可有3种叠加方式,所以有3*n个箱子.将箱子按长度由大到小排序,有求箱子按宽度的最长下降子序列的高度之和即可. #include<cstdio> #include<algor ...
- 九度OJ 1112:拦截导弹 (DP、最长下降子序列)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3124 解决:1525 题目描述: 某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能 ...
- hdu1160简单dp最长下降子序列
/* 简单dp,要记录顺序 解:先排序,然后是一个最长下降子序列 ,中间需记录顺序 dp[i]=Max(dp[i],dp[j]+1); */ #include<stdio.h> #incl ...
- POJ 1836 Alignment(DP max(最长上升子序列 + 最长下降子序列))
Alignment Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 14486 Accepted: 4695 Descri ...
随机推荐
- ArcMap - 分割.
一,分割面: 1,在屏幕上新增线分割面: 使待编辑的面处于编辑状态 -> 选择待分割的面(使其处于选中状态) -> 选择编辑工具的 (Cut Polygons Tools) ->画线 ...
- JavaScript中style.left与offsetLeft的区别
今天在制作焦点轮播图的时候,遇到一个问题,在使用style.left获取图片的位置时,怎么也获取不到.换用offsetLeft就能够成功获取到了.虽然实现了我想要的效果,但是还是不甘心啊,没有找到原因 ...
- 2016.7.13abstract
abstract的使用: 1.当许多类中有相同的功能,功能的内容不同,那么我们向上提取功能的定义. 2当功能的定义被 abstract修饰后,那么它的类也要被abstract修饰,使其抽象化. 3被a ...
- 【BZOJ2038】【莫队】小z的袜子
Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜 ...
- HTML5有语义的内联元素详解
HTML5有语义的内联元素详解 time标签 time 元素表示一个时间值,比如 5:35 P.M., EST, April 23, 2007.例如: Example Source Code:< ...
- HTML5-黑客帝国2D
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>& ...
- YII 小部件 yii小部件查看方法 小物件做的表单
要使用小部件,可以先到总文件去找 framework/yiilite文件里面搜索“CAtiveForm” (如果觉得小部件的radio布局有点难看,可以在外面定义,具体可以在控制器里面定义) 如下 ...
- Ueditor之SAE移植
新浪SAE环境下使用UEditor http://www.cnblogs.com/zjzhome/p/3815460.html?utm_source=tuicool 在SAE上使用Ueditor的图片 ...
- 一个关于导出excel模板的实例
1 首先jsp页面 点击模板下载,会自动下载模板excel,效果如下 让我们看源码: 1 jsp页面 <div class="tab-pane" id="profi ...
- vmware中ubuntu更新内核后无法进入桌面,鼠标“漂移”滑动
问题背景: 我机子上是在vmware下安装了ubuntu12.04,今天正在ubuntu下工作,结果提示内核有更新,手贱的就点了个OK,开始更新,更新完重启.结果,问题来了,刚开始系统启动,进入系统登 ...