8-导弹拦截一(n^2 and nlogn)
/*某国为了防御敌国的导弹袭击,研发出一套导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发拦截
炮弹能够到达任意的高度,但是以后每一发拦截炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的多枚导弹来
袭。
/
输入描述
输入的第一行为导弹的个数n (0<n<10000),接下来的一行为导弹依次飞来的高度h(不大于
30000 的正整数)
输出描述
输出最多拦截的导弹个数。
输入样例
6
5 3 2 4 1 3
输出样例
4*/
1. n^2的
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int b[305];
int n, a[3005], sum = 0;
int dp[305];
int main(){
int j = 0, min;
cin >> n;
for(int i = 0; i < n; i++)
cin >> a[i];
for(int i = 1; i < n; i++){
dp[0] = 1;
for(int j = 0; j < i; j++){
if(a[j] <= a[i] && dp[j] + 1 > dp[i]){
// b[i] = a[j];
dp[i] = dp[j] + 1;
}
}
// cout << b[i] << " ";
// cout << dp[i] << " ";
}
min = dp[0];
for(int i = 1; i < n; i++)
if(min < dp[i])
min = dp[i];
cout << min;
return 0;
}
2.下面是nlogn
#include <iostream>
using namespace std;
int search(int s, int *g, int low, int high){
int mid = 1;
while(low < high){
mid = (low + high) / 2;
if(g[mid] <= s)
low = mid + 1;
else
high = mid;
}
return low;
}
int main(){
int g[305], a[305], n;
cin >> n;
for(int i = 0; i < n; ++i)
cin >> a[i];
g[1] = a[0];
int len = 1, j = 0;
for(int i = 1; i < n; i++){
if(g[len] < a[i]) //如果a[i]比g的最后一个数组小就直接插在后面
j = ++len;
else
// j = search(a[i], g, 1, ++len); // (注意:这种情况长度不变,不能写成++len)
j = search(a[i], g, 1, len + 1); // 否则就插在g中比a[i]大的数中最小的那个数的位置即替换他
g[j] = a[i]; //用二分找的插入的位置
// cout << j << " "; //打印的是每次a[i]加入g 数组的位置(从1开始存入的)
}
cout << len;
return 0;
}
8-导弹拦截一(n^2 and nlogn)的更多相关文章
- 【题解】P1020 导弹拦截
[题解]P1020 导弹拦截 从n^2到nlogn 第二问就是贪心,不多说 第一问: 简化题意:求最长不下降子序列 普通n^2: for (int i = 1; i <= n; i++) for ...
- P1020 导弹拦截(nlogn求最长不下降子序列)
题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹 ...
- 【dp】导弹拦截
题目链接 https://www.luogu.org/problemnew/show/P1020 题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的 ...
- P1020 导弹拦截 dp 树状数组维护最长升序列
题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹 ...
- 导弹拦截与Dilworth定理
这两天被Dilworth.链和反链搞到头昏脑胀,终于有点眉目,现在来总结一下. Dilworth定理说的是:对于一个偏序集,其最少链划分数等于其最长反链的长度. Dilworth定理的对偶定理说的是: ...
- [dp][uestc oj][最长上升子序列] LIS N - 导弹拦截
N - 导弹拦截 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit ...
- Luogu-P1020(导弹拦截)(DP,LIS ,二分优化)
Luogu-P1020(导弹拦截)(DP) 题意: 给n(n<=100000) 个数字,求最长不上升子序列的长度和最少的不上升子序列的个数. 分析: 第一问: 求最长不上升子序列有 O(n^2) ...
- luoguP1020 导弹拦截
题意 题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国 ...
- 洛谷 P1020导弹拦截题解
洛谷链接:https://www.luogu.org/problem/P1020 题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到 ...
- luogu P1020 导弹拦截 x
首先上题目~ luogu P1020 导弹拦截 题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都 ...
随机推荐
- eclipse在线安装jd反编译插件
eclipse在线安装jd反编译插件地址 http://jd.benow.ca/jd-eclipse/update
- 不重启修改'log_slave_updates'变量
Variable 'log_slave_updates' is a read only variable 不重启修改mysql变量 执行复制的时候遇到的问题 mysql> show variab ...
- Maven 添加jdk编译插件
问题描述: 默认情况下,eclipse的maven项目使用jdk1.5编译,而我们的jdk为1.8每次更改jdk1.5之后,只要maven项目已更新,eclipse就会自动的回到jdk1.8结局方法: ...
- more 可翻页查看(一页一页翻动)
命令解释 我们查看数据的时候,使用前面提到的nl与cat.tac等等,都是将文件内容一次性输出到屏幕上,看起来不是很方便,那我们就可以使用这个命令,一页一页查看,前面的数据不至于看不到. 命令说明 [ ...
- PHP的mysqli_query参数MYSQLI_STORE_RESULT和MYSQLI_USE_RESULT的区别
这篇文章主要介绍了PHP的mysqli_query参数MYSQLI_STORE_RESULT和MYSQLI_USE_RESULT的区别,本文给出了这两个参数的5个区别,需要的朋友可以参考下 虽然nos ...
- 单网卡用双IP上内外网
网络 2008-09-22 17:42 阅读44 评论1 字号: 大 中 小 PC机同时上内外网一例 一个公司内部,一台pc机在上内网的同时,还要求上外网,如何在一块网卡上实现 ...
- time 时间内置模块3种形态的转化
import time print(time.time()) #获得时间戳 1526998642.877814 print(time.sleep(2)) #停止2秒 print(time.gmti ...
- Spring boot 配置文件 使用占位符号
配置文件占位符 1:使用随机数 ${random.value}.${random.int}.${random.long} ${random.)}.${random.,]} 2: 占位符获取之前配置的值 ...
- eclipse插件常用网址链接
目录 jar下载地址 java maven svn erMaster linux镜像ISO: http://www.linuxfly.org/post/659/ virtual下载: ...
- Git----分支管理之解决冲突03
人生不如意之事十之八九,合并分支往往也不是一帆风顺. 准备新的feature1分支,继续我们的新分支开发: $ git checkout -b feature1Switched to a new br ...