P1233木棍加工
这个题被算法标签标为DP,但其实可能只是用dp求子序列,,(n方)
给出l与w,只要是l与w同时满足小于一个l与w,那么这个木棍不需要时间,反之需要1.看到这个题,首先想到了二维背包,然后发现没有最大的容量,放弃。然后又联想到了活动选择,来一个结构体排序和贪心,但是发现贪心其实具有后效性放弃。然后看了题解,发现最长不下降子序列是正解!碰巧昨天学习了中科大少年班lhw大佬发在群里的..序列,所以便去思考了。先用结构体存下l与w,然后排序l。再用nlogn的算法去求解最长不下降子序列,长度则代表时间。因为l已经从大到小排序好了,只要宽度是上升(>)的就代表时间必须存在,len++,如果是下降的,就去替换,时间保持不变。这类似于导弹拦截。另外,洛谷这个题的数据有错误。亲测输入数据反了。
1.把典型题迁移运用到复杂题中,总可以找到摸板的,关键在于弄懂会写简单题,那天远足回来写的导弹拦截,效果并不好
2.贪心是可以尝试的
3.upper(lower)_bound一定要运用起来
代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
#include<cstring>
#include<cmath>
#define N 100001
using namespace std;
struct node{
int l;
int w;
}a[N];
bool cmp(node a,node b){
return a.l> b.l;
}
int n;
int b[N];
int ans=;
int len=;
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++){
cin>>a[i].l>>a[i].w;
}
sort(a+,a+n+,cmp);
b[]=a[].w;
for(int i=;i<=n;i++){
if(a[i].w>b[len]){
b[++len]=a[i].w;
}
else{
int j=lower_bound(b+,b+len+,a[i].w)-b;//找到第一个大于等于他的
b[j]=a[i].w;
}
}
cout<<len<<endl;
return ;
}
P1233木棍加工的更多相关文章
- 洛谷 P1233 木棍加工 解题报告
P1233 木棍加工 题目描述 一堆木头棍子共有n根,每根棍子的长度和宽度都是已知的.棍子可以被一台机器一个接一个地加工.机器处理一根棍子之前需要准备时间.准备时间是这样定义的: 第一根棍子的准备时间 ...
- P1233 木棍加工
P1233 木棍加工 题目描述 一堆木头棍子共有n根,每根棍子的长度和宽度都是已知的.棍子可以被一台机器一个接一个地加工.机器处理一根棍子之前需要准备时间.准备时间是这样定义的: 第一根棍子的准备时间 ...
- 洛谷P1233 木棍加工【单调栈】
题目:https://www.luogu.org/problemnew/show/P1233 题意: 有n根木棍,每根木棍有长度和宽度. 现在要求按某种顺序加工木棍,如果前一根木棍的长度和宽度都大于现 ...
- 洛谷 P1233 木棍加工
题目描述 一堆木头棍子共有n根,每根棍子的长度和宽度都是已知的.棍子可以被一台机器一个接一个地加工.机器处理一根棍子之前需要准备时间.准备时间是这样定义的: 第一根棍子的准备时间为1分钟: 如果刚处理 ...
- 洛谷P1233 [木棍加工]
主要思路: 这道题一眼看过去就可以贪心.. 首先可以按L排序.. 显然排序之后我们就可以抛开L不管了.. 然后就可以愉快的贪心了.. 细节: 这道题可以看成用 最少的合法序列(详见原题) 装下所有木棍 ...
- P1233 木棍加工 dp LIS
题目描述 一堆木头棍子共有n根,每根棍子的长度和宽度都是已知的.棍子可以被一台机器一个接一个地加工.机器处理一根棍子之前需要准备时间.准备时间是这样定义的: 第一根棍子的准备时间为1分钟: 如果刚处理 ...
- Luogu P1233 木棍加工 【贪心/LIS】
题目描述 一堆木头棍子共有n根,每根棍子的长度和宽度都是已知的.棍子可以被一台机器一个接一个地加工.机器处理一根棍子之前需要准备时间.准备时间是这样定义的: 第一根棍子的准备时间为1分钟: 如果刚处理 ...
- [Luogu] P1233 木棍加工
题目描述 一堆木头棍子共有n根,每根棍子的长度和宽度都是已知的.棍子可以被一台机器一个接一个地加工.机器处理一根棍子之前需要准备时间.准备时间是这样定义的: 第一根棍子的准备时间为1分钟: 如果刚处理 ...
- 洛谷P1233 木棍加工题解 LIS
突然发现自己把原来学的LIS都忘完了,正好碰见这一道题.|-_-| \(LIS\),也就是最长上升子序列,也就是序列中元素严格单调递增,这个东西有\(n^{2}\)和\(nlog_{2}n\)两种算法 ...
随机推荐
- vue 搜索关键词 变颜色
<a class="text"> <span>{{item.name.slice(0,item.name.toLowerCase().indexOf(inp ...
- C#与JAVA的互通
C#与JAVA的互通 https://blog.csdn.net/sinat_35165183/article/details/68936910
- MySQL 运维管理平台
github: https://github.com/XiaohaoYu/mysql_platform
- teradata安装
一,下载 步骤1 - 从链接下载所需的VM版本,http://downloads.teradata.com/download/database/teradata-express-for-vmware- ...
- BZOJ 4597: [Shoi2016]随机序列 线段树 + 思维
Description 你的面前有N个数排成一行.分别为A1, A2, … , An.你打算在每相邻的两个 Ai和 Ai+1 间都插入一个加号或者 减号或者乘号.那么一共有 3^(n-1) 种可能的表 ...
- 数据:ContentResolver类
ContentResolver是通过URI来查询ContentProvider中提供的数据.除了URI以 外,还必须知道需要获取的数据段的名称,以及此数据段的数据类型. 如果你需要获取一个特定的记 ...
- CodeChef DGCD Dynamic GCD
CodeChef题面 Time limit 210 ms Code length Limit //内存限制也不说一下,真是的-- 50000 B OS Linux Language limit C, ...
- Python语言中enumerate()及zip()函数的使用例子
在Python编程语言中,enumerate()及zip()是两个常用的内置函数,这两个函数功能类似,但又有所区别,下面通过两个例子分别进行说明. enumerate()函数 该函数在字面上是枚举.列 ...
- zabbix监控惠普打印机
http://www.ttlsa.com/zabbix/zabbix-monitor-hp-printer/
- leetcode-mid-math -171. Excel Sheet Column Number
mycode 90.39% class Solution(object): def titleToNumber(self, s): """ :type s: str ...