HDU 1257最少拦截系统[动态规划]
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1257
最少拦截系统
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 62100 Accepted Submission(s): 24227
Problem Description
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.某天,雷达捕捉到敌国的导弹来袭.由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹.
怎么办呢?多搞几套系统呗!你说说倒蛮容易,成本呢?成本是个大问题啊.所以俺就到这里来求救了,请帮助计算一下最少需要多少套拦截系统.
Input
输入若干组数据.每组数据包括:导弹总个数(正整数),导弹依此飞来的高度(雷达给出的高度数据是不大于30000的正整数,用空格分隔)
Output
对应每组数据输出拦截所有导弹最少要配备多少套这种导弹拦截系统.
Sample Input
8 389 207 155 300 299 170 158 65
Sample Output
2
思路:该题是求最长不上升的子序列个数(相当于最长下降(或上升)子序列的长度的强化版)。数据小可以直接暴力进行判断(复杂度为)。用数组b[n]表示 以 第 J 个元素结尾的序列 ,若
b[j]" class="mathcode" src="https://private.codecogs.com/gif.latex?a%5Bi%5D%3Eb%5Bj%5D">,则表示之前的系统不能拦截下这个导弹,需要再开一个系统,该系统第一个元素为
,若能在数组 b 中找到一个元素使得
a[i]" class="mathcode" src="https://private.codecogs.com/gif.latex?b%5Bj%5D%3Ea%5Bi%5D"> 则代表
所在的系统能够拦截下该导弹。
每次遍历a[i]时,对数组b从左到右扫描,找到一个最小的 J(b[j]>=a[i])对b[j]进行更新,若找不到则需要另开一个系统(b[++t]=a[i])。
代码1:
#include<stdio.h>
int a[10005];
int b[10005];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
if(n==0)
{
continue;
}
for(int i=1; i<=n; i++)
scanf("%d",&a[i]);
int t=1;//所需拦截系统的个数
b[1]=a[1];
for(int i=2; i<=n; i++)
{
int flag=0;
for(int j=1; j<=t; j++)
{
if(b[j]>=a[i])
{
b[j]=a[i];flag=1;
break;
}
}
if(!flag)
b[++t]=a[i];
}
printf("%d\n",t);
}
return 0;
}
代码2:使用lower_bound函数(二分查找 复杂度降低到)使用方法:lower_bound( begin,end,num):从数组(从小到大)的begin位置到end-1位置二分查找第一个大于或等于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。
#include<bits/stdc++.h>
using namespace std;
int a[1005];
int b[1005];
int main()
{
int n;
while(cin >> n)
{
for(int i = 1; i <= n; i++)
cin >> a[i];
b[1] = a[1];
int cnt = 1;
for(int i = 2; i <= n; i++)
{
if(b[cnt] < a[i])
b[++cnt] = a[i];
else
{
int temp = lower_bound(b + 1, b + cnt + 1, a[i]) - b;
b[temp] = a[i];
}
}
cout << cnt << endl;
}
}
HDU 1257最少拦截系统[动态规划]的更多相关文章
- HDU 1257 最少拦截系统 最长递增子序列
HDU 1257 最少拦截系统 最长递增子序列 题意 这个题的意思是说给你\(n\)个数,让你找到他最长的并且递增的子序列\((LIS)\).这里和最长公共子序列一样\((LCS)\)一样,子序列只要 ...
- HDU 1257 最少拦截系统(贪心 or LIS)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1257 最少拦截系统 Time Limit: 2000/1000 MS (Java/Others) ...
- hdu 1257 最少拦截系统(动态规划 / 贪心)
最少拦截系统 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- HDU 1257 最少拦截系统(Dilworth定理+LIS)
最少拦截系统 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- HDU 1257 最少拦截系统 (DP || 贪心)
最少拦截系统 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Statu ...
- hdu 1257 最少拦截系统【贪心 || DP——LIS】
链接: http://acm.hdu.edu.cn/showproblem.php?pid=1257 http://acm.hust.edu.cn/vjudge/contest/view.action ...
- HDU 1257——最少拦截系统——————【LIS变型题】
最少拦截系统 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Statu ...
- hdu 1257最少拦截系统
最少拦截系统 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.某天,雷达捕捉到敌国的 ...
- POJ - 2533 Longest Ordered Subsequence与HDU - 1257 最少拦截系统 DP+贪心(最长上升子序列及最少序列个数)(LIS)
Longest Ordered Subsequence A numeric sequence of ai is ordered if a1 < a2 < ... < aN. Let ...
随机推荐
- c++程序—if语句实践
三只小 #include<iostream> using namespace std; #include<string> int main() { //which pig is ...
- MFC OCX 控件事件的添加和处理
1.控件的事件一般都是由对外的接口引发到,这里定一个接口先: 该接口有一个字符串参数,表示调用者将传入一个字符串,传进来后,我们将取得字符串的长度. 2.添加事件: 事件应该是属于窗口的,所以在Ctr ...
- 20 ~ express ~ 前台内容分页展示
一,后台路由文件 /router/main.js var express = require('express') var router = express.Router() var Category ...
- Mybatis(1)-初识mybaits
一.概述 1.概述 mybatis 是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql 语句本身, 而不需要花费精力去处理加载驱动.创建连接.创建 state ...
- MVC学生管理系统-阶段IV(修改学生信息)
项目源码 :https://download.csdn.net/download/weixin_44718300/11091042 前期准备,主体框架, 学生列表显示 请看阶段一文章 添加学生信息 ...
- CSS属性之float浮动属性
float 属性定义元素在哪个方向浮动.以往这个属性总应用于图像,使文本围绕在图像周围,不过在 CSS 中,任何元素都可以浮动.浮动元素会生成一个块级框,而不论它本身是何种元素. float有四个属性 ...
- Golang---sort包
Sort 包介绍 Go 语言标准库 sort 包中实现了几种基本的排序算法:插入排序.快速排序和堆排序,但是在使用 sort 包进行排序时无需具体考虑使用哪种排序方式,因为该方法会根据传入的排序的数据 ...
- ping内网服务器 新
#!/bin/bash ip="192.168.1."lastip=(200201202210211212220221222) #ip列表 可以继续添加 ps () { ping ...
- addlayer添加神经网络层
def addlayer(inputs,insize,outsize,activity_function = None): weights = tf.Variable(tf.random_nor ...
- F5 BIG-IPLTM但比组网的三种连接模式(转)
原文链接:https://www.cnblogs.com/yujianadu/p/11850977.html作者:遇见阿杜