洛谷 - P1020 - 导弹拦截 - 最长上升子序列
https://www.luogu.org/problemnew/show/P1020
终于搞明白了。根据某定理,最少需要的防御系统的数量就是最长上升子序列的数量。
呵呵手写二分果然功能很多,想清楚自己要找的是什么就可以了。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int INF=0x3f3f3f3f;
int n;
int a[100005];
int dp[50005];
int f1(int *dp,int a){
int l=1,r=n;
while(1){
int m=(l+r)>>1;
if(m==l){
if(dp[l]<a)
return l;
else
return r;
}
if(dp[m]<a){
r=m;
}
else{
l=m+1;
}
}
return -1;
}
int f2(int *dp,int a){
int l=1,r=n;
while(1){
int m=(l+r)>>1;
if(m==l){
if(dp[l]>=a)
return l;
else
return r;
}
if(dp[m]>=a){
r=m;
}
else{
l=m+1;
}
}
return -1;
}
int main(){
n=0;
int t;
while(~scanf("%d",&t)){
n++;
a[n]=t;
}
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++){
int id=f1(dp,a[i]);
//cout<<"id="<<id<<endl;
dp[id]=a[i];
/*for(int k=1;k<=n;k++){
printf("dp[%d]=%d\n",k,dp[k]);
}*/
}
int ans=n;
for(int i=1;i<=n;i++){
if(dp[i]==0){
ans=i-1;
break;
}
}
printf("%d\n",ans);
memset(dp,INF,sizeof(dp));
for(int i=1;i<=n;i++){
int id=f2(dp,a[i]);
//cout<<"id="<<id<<endl;
dp[id]=a[i];
/*for(int k=1;k<=n;k++){
printf("dp[%d]=%d\n",k,dp[k]);
}*/
}
ans=n;
for(int i=1;i<=n;i++){
if(dp[i]==INF){
ans=i-1;
break;
}
}
printf("%d\n",ans);
}
洛谷 - P1020 - 导弹拦截 - 最长上升子序列的更多相关文章
- codevs1044 拦截导弹==洛谷 P1020 导弹拦截
P1020 导弹拦截 题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天 ...
- 洛谷 P1020 导弹拦截(dp+最长上升子序列变形)
传送门:Problem 1020 https://www.cnblogs.com/violet-acmer/p/9852294.html 讲解此题前,先谈谈何为最长上升子序列,以及求法: 一.相关概念 ...
- 【动态规划】【二分】【最长不下降子序列】洛谷 P1020 导弹拦截
最长不下降子序列的nlogn算法 见 http://www.cnblogs.com/mengxm-lincf/archive/2011/07/12/2104745.html 这题是最长不上升子序列,倒 ...
- 洛谷 P1020导弹拦截题解
洛谷链接:https://www.luogu.org/problem/P1020 题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到 ...
- 洛谷P1020 导弹拦截【单调栈】
题目:https://www.luogu.org/problemnew/show/P1020 题意: 给定一些导弹的高度. 一个导弹系统只能拦截高度不增的一系列导弹,问如果只有一个系统最多能拦截多少导 ...
- codevs——T1044 拦截导弹 || 洛谷——P1020 导弹拦截
http://codevs.cn/problem/1044/ || https://www.luogu.org/problem/show?pid=1020#sub 时间限制: 1 s 空间限制: 1 ...
- 洛谷P1020导弹拦截——LIS
题目:https://www.luogu.org/problemnew/show/P1020 主要是第二问,使用了dilworth定理:一个序列中最长不上升子序列的最大覆盖=最长上升子序列长度. di ...
- 洛谷P1020 导弹拦截 题解 LIS扩展题 Dilworth定理
题目链接:https://www.luogu.com.cn/problem/P1020 题目大意: 给你一串数,求: 这串数的最长不上升子序列的长度: 最少划分成多少个子序列是的这些子序列都是不上升子 ...
- 洛谷 [P1020] 导弹拦截 (N*logN)
首先此一眼就能看出来是一个非常基础的最长不下降子序列(LIS),其朴素的 N^2做法很简单,但如何将其优化成为N*logN? 我们不妨换一个思路,维护一个f数组,f[x]表示长度为x的LIS的最大的最 ...
随机推荐
- 一个兼容性比较好的图片左右滚动的js
下载地址:http://www.cnblogs.com/RightDear/admin/Files.aspx 文件:shhds.rar
- 九度OJ 1103:二次方程计算器 (解方程)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2804 解决:633 题目描述: 设计一个二次方程计算器 输入: 每个案例是关于x的一个二次方程表达式,为了简单,每个系数都是整数形式. 输 ...
- go签名算法设计
Go by Example 中文:Base64编码 https://books.studygolang.com/gobyexample/base64-encoding/
- Netty聊天器(实战一):从0开始实战100w级流量应用
Java 聊天程序(百万级流量实战一):系统介绍 疯狂创客圈 Java 分布式聊天室[ 亿级流量]实战系列之14 [博客园 总入口 ] 源码IDEA工程获取链接:Java 聊天室 实战 源码 写在前面 ...
- Connection Phase Packets
Connection Phase Packets https://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet ...
- 使用酷Q SDK开发QQ机器人
酷Q SDK下载地址:https://github.com/CoolQ/cqsdk-vc 打开工程,编辑appmain.cpp 将“私聊消息”处的代码 更改为 CQEVENT(int32_t, __e ...
- Javascript - ERR_CONTENT_LENGTH_MISMATCH
不知道做了什么,有两天没有跑vue项目啦,今天突然出现加载脚本的时候出现 ERR_CONTENT_LENGTH_MISMATCH这个错误, 所以我去搜索了一下 找到如下答案 http://stac ...
- Raspberry Pi3 ~ C语言控制串口
注明出处:http://www.cnblogs.com/einstein-2014731/p/5551846.html 使用C语言控制树莓派3B的串口,实现使用串口收发数据的目的.之前以为这个串口是被 ...
- 7-5 打印选课学生名单(25 point(s)) 【排序】
7-5 打印选课学生名单(25 point(s)) 假设全校有最多40000名学生和最多2500门课程.现给出每个学生的选课清单,要求输出每门课的选课学生名单. 输入格式: 输入的第一行是两个正整数: ...
- LightOJ1138 —— 阶乘末尾0、质因子分解
题目链接:https://vjudge.net/problem/LightOJ-1138 1138 - Trailing Zeroes (III) PDF (English) Statistic ...