https://vjudge.net/contest/68966#problem/I

【题解】

http://www.cnblogs.com/kuangbin/archive/2012/08/03/2621110.html

我们可以把由同一个拦截系统负责打下的导弹归为一组。

假设在输入某一系列的导弹高度中,前N个导弹有X组(即需要X个拦截导弹系统),那么第N+1个导弹无非有两种情况:

1.把这个导弹归到X组中的一组,即不增加拦截系统

2.开启新的一组,即增加一个拦截系统

那么什么时候满足1呢? 就是前X组中有一组的最后一个导弹(即高度最低的导弹)比现在这个第N+1的导弹高度还高。

如 5 2 9 1 最后一个导弹高度为1,那么它可以与5 2同一组,也可以与9同一组

那么什么时候满足2呢?就是前X组中没有一组的最后一个导弹(即高度最低的导弹)比现在这个第N+1的导弹高度还高。

如 5 2 9 10 最后一个导弹的高度为10,因此需要一个新的拦截系统。

这两种情况已经分析完了,考虑一些细节,就是在考虑第一种情况时到底应该将 1 放到哪一组?

其实很简单,如 5 2 9 1 7 如果1与9一组,很明显7将要新的拦截系统。而如果1与5 2一组,那么7就可以与9一组,不需要新的拦截系统。

因为1与9一组时,这组高度最低为1,失去了后面高度为6,5这些高度与9一组的机会。因此归于哪一组时,应计算每一组高度最低的导弹与为归组的导弹的高度差,取高度差最小的一组。

最后就可通过有几组来判定需要几个拦截系统。

【Accepted】

 #include <iostream>
#include <stdio.h>
#include <cmath>
#include <vector>
#include <algorithm>
#include <set>
#include <map>
#include <queue>
#include <deque>
#include <stack>
#include <string>
#include <bitset>
#include <ctime>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll; int n;
const int maxn=3e4+;
const int inf=0x3f3f3f3f;
int a[maxn];
int ans[maxn];
int main()
{
while(~scanf("%d",&n))
{
memset(ans,,sizeof(ans));
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
}
int cnt=;
ans[]=a[];
for(int i=;i<=n;i++)
{
int index=-;
int minn=inf;
for(int k=;k<=cnt;k++)
{
if(ans[k]>=a[i]&&ans[k]<minn)
{
minn=ans[k];
index=k;
}
}
if(index==-)
{
ans[++cnt]=a[i];
}
else
{
ans[index]=a[i];
}
}
cout<<cnt<<endl;
}
return ;
}

【贪心】HDU 最少拦截系统的更多相关文章

  1. HDU 1257 最少拦截系统(贪心 or LIS)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1257 最少拦截系统 Time Limit: 2000/1000 MS (Java/Others)   ...

  2. hdu 1257 最少拦截系统【贪心 || DP——LIS】

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1257 http://acm.hust.edu.cn/vjudge/contest/view.action ...

  3. HDU 1257 最少拦截系统 (DP || 贪心)

    最少拦截系统 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Statu ...

  4. hdu 1257 最少拦截系统(动态规划 / 贪心)

    最少拦截系统 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  5. POJ - 2533 Longest Ordered Subsequence与HDU - 1257 最少拦截系统 DP+贪心(最长上升子序列及最少序列个数)(LIS)

    Longest Ordered Subsequence A numeric sequence of ai is ordered if a1 < a2 < ... < aN. Let ...

  6. HDU——1257最少拦截系统(贪心)

    最少拦截系统 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  7. 【HDU - 1257】最少拦截系统(贪心)

    最少拦截系统 Descriptions: 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的 ...

  8. HDU 1257 最少拦截系统(Dilworth定理+LIS)

    最少拦截系统 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  9. HDU1257 最少拦截系统 —— 贪心

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1257 最少拦截系统 Time Limit: 2000/1000 MS (Java/Othe ...

随机推荐

  1. select选择框中,model传的值并非是页面上的值,而是另一个值

    对于编程来说,money和rebate代表的是金额优惠和折扣优惠,采用money或rebate便于数据存储.但是页面显示给用户的时候是金额优惠和折扣优惠,并不是显示编程中所存储数据.所以选择的mode ...

  2. JAVA Map的使用

    学JAVA那么多天了,所以就不写那啥了,哈哈 Map 是一个很实用的东西,它查询的速度也是飞快的.还有很多好的地方, 至于好在哪里,我也说不清. 还是用代码来说吧: import java.util. ...

  3. 1. UI Tests简介

    (1) User Interface Testing UI Testing库主要提供了与App中的UI元素进行查找和交互的能力,这使得我们可以通过验证UI元素的状态来测试App是否正常运行.     ...

  4. Android Studio Terminal 不是内部或外部命令,也不是可运行程序或批处理文件

    1.Android Studio Terminal 命令行无效的问题 在Android Studio中自带了命令行终端Terminal,但是我们在输入命令时经常会发现:“XXX”不是内部或外部命令,也 ...

  5. WARN警告:Going to buffer response body of large or unknown size. Using getResponseBodyAsStream instead is recommended

    使用Apache HttpClient发送请求,有大量WARN警告:Going to buffer response body of large or unknown size. Using getR ...

  6. Tomcat7的安装与配置

    Tomcat的安装及配置我曾经使用过tomcat,并实现了一个简单的servlet程序.没想到再次安装tomcat的时候用浪费了我大半天的时间.我想有必要做个总结,否则下次不知又要花费我多少时间. 1 ...

  7. 使用ABAP正则表达式解析HTML标签

    需求就是我用ABAP的某个函数从数据库读取一个字符串出来,该字符串的内容是一个网页. 网页的form里包含了很多隐藏的input field.我的任务是解析出name为svyValueGuid的inp ...

  8. select2宽度占比100%,导致无法实现浮动效果

  9. 位(bit)、字节(byte)、字

    1.位(bit)来自英文bit,音译为“比特”,表示二进制位.位是计算机内部数据储存的最小单位,11010100是一个8位二进制数.一个二进制位只可以表示0和1两种状态(21):两个二进制位可以表示0 ...

  10. BZOJ3940: [Usaco2015 Feb]Censoring (AC自动机)

    题意:在文本串上删除一些字符串 每次优先删除从左边开始第一个满足的 删除后剩下的串连在一起重复删除步骤 直到不能删 题解:建fail 用栈存当前放进了那些字符 如果可以删 fail指针跳到前面去 好菜 ...