---恢复内容开始---

最少拦截系统 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 38242 Accepted Submission(s): 15029 Problem Description

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

某天,雷达捕捉到敌国的导弹来袭.由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹. 怎么办呢?多搞几套系统呗!你说说倒蛮容易,成本呢?成本是个大问题啊.所以俺就到这里来求救了,

请帮助计算一下最少需要多少套拦截系统.

Input 输入若干组数据.每组数据包括:导弹总个数(正整数),导弹依此飞来的高度(雷达给出的高度数据是不大于30000的正整数,用空格分隔)

Output 对应每组数据输出拦截所有导弹最少要配备多少套这种导弹拦截系统. Sample Input 8 389 207 155 300 299 170 158 65 Sample Output 2

最开始想的便是lis,不过貌似跑偏了,计算出最大反序lis,然后根据标记查找最少需要几台,不过算法有问题巴拉巴拉不过-。-;

神测试数据:10 3 6 5 3 2 1 0 5 4 3 答案应是2(65543/33210),按我的就是3(hhhh

好吧然后就是贪心了,先把第一胎加入系统数组中,接着如果后面的比他小/==便无需在新购一台,更改比他大的最小机器即可,

反之加入一台新机器。大小就是他,不过貌似不用每次sort,因为按照这个逻辑机器的顺序恰是升序嘻嘻; 代码:

#include<bits/stdc++.h>

using namespace std;

int main() {

int i,j,n,k,l,sum,a[1005],temp[1005]; //a[i]也不必开数组

while (cin>>n){ sum=-1;

for (i=1;i<=n;i++){

int flag=1;

cin>>a[i];

if (i==1) temp[++sum]=a[i];

for (j=0;j<=sum;j++){

if (temp[j]>=a[i]) {

temp[j]=a[i];

flag=0;

break; } }

if (flag) temp[++sum]=a[i]; //加入新机器中

}

cout<<sum+1<<endl; }

return 0; }

然后发现麻麻的直接求一遍lis就ac了汗死:

#include<bits/stdc++.h>

using namespace std;

int lis(int n,int a[]) {

int i,j,macn,dp[1005]={0},sum=0;

for (i=1;i<=n;i++) {

macn=0; for (j=1;j<i;j++) {

if (a[j]<a[i]&&dp[j]>macn) macn=dp[j];

}

dp[i]=macn+1;

sum=max(sum,dp[i]); }

return sum; }

int main() {

int a[1005],n,i,j;

while (cin>>n){

for (i=1;i<=n;i++)

cin>>a[i];

cout<<lis(n,a)<<endl; }

return 0; } 炮弹发射高度递减,如果后面一台大于前面的高度,就不能拦截后面的这台,所以要多一台系统

简单证明: a b c d 假设a<c<d, 则b>d/b<a,

当b>d时,此时a/bc/d 三台;

当b<a时,此时ab/c/d三台

所以b总可与左边或右边的结合为一台;

---恢复内容结束---

hdu 1257 LIS (略坑5的更多相关文章

  1. HDU 1257——最少拦截系统——————【LIS变型题】

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

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

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

  3. HDU 1257 最少拦截系统 最长递增子序列

    HDU 1257 最少拦截系统 最长递增子序列 题意 这个题的意思是说给你\(n\)个数,让你找到他最长的并且递增的子序列\((LIS)\).这里和最长公共子序列一样\((LCS)\)一样,子序列只要 ...

  4. 【贪心】HDU 1257

    HDU 1257 最少拦截系统 题意:中文题不解释. 思路:网上有说贪心有说DP,想法就是开一个数组存每个拦截系统当前最高能拦截的导弹高度.输入每个导弹高度的时候就开始处理,遍历每一个拦截系统,一旦最 ...

  5. 怒刷DP之 HDU 1257

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

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

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

  7. POJ 1065 Wooden Sticks / hdu 1257 最少拦截系统 DP 贪心

    参考链接:http://blog.csdn.net/xiaohuan1991/article/details/6956629 (HDU 1257 解题思路一样就不继续讲解) POJ 1065题意:给你 ...

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

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

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

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

随机推荐

  1. ES6中新增的数组知识

    JSON数组格式转换 JSON的数组格式就是为了前端快速的把JSON转换成数组的一种格式,我们先来看一下JSON的数组格式怎么写. let  json = {     '0': 'xzblogs', ...

  2. ZJOI 2015 幻想乡战略游戏(动态点分治)

    题意 https://loj.ac/problem/2135 思路 首先要明确一点,答案分布是有单调性的.什么意思呢?假设我们的答案在 \(u\) 节点,\((u,v)\) 之间有一条边且 \(u\) ...

  3. Derek解读Bytom源码-启动与停止

    作者:Derek 简介 Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockchain/bytom ...

  4. Java 静态方法不能重写但可以被子类静态方法覆盖

    强调 静态方法是属于类的,只存在一份,会被该类的所有对象共享.不可以被重写. 静态方法可以被子类继承,但是不可以被子类重写 class door{ } class wood_Door extends ...

  5. windows 上让文件类型和程序关联的批处理程序。

    文件关联工具 地址: https://github.com/wll8/assoc-tool 本工具可以用来为你的便携程序添加文件关联,比如 nodepad2.exe . vscode 或其他图片处理程 ...

  6. 将tiff文件转化为jpg文件并保存

    jar包准备 jai-codec和jai-core 主要过程 private boolean parseTifFile(FileItem item) { logger.info("----- ...

  7. 【译】第9节---EF Code First中数据注解

    原文:http://www.entityframeworktutorial.net/code-first/dataannotation-in-code-first.aspx EF Code-First ...

  8. 【译】第5节---Code First约定

    原文:http://www.entityframeworktutorial.net/code-first/code-first-conventions.aspx 我们在上一节中已经看到了EF Code ...

  9. struct和typedef struct用法和区别

    1 首先://注意在C和C++里不同 1.1 在C中定义一个结构体类型要用typedef: typedef struct Student { int a; }Stu; 于是在声明变量的时候就可:Stu ...

  10. 判断是否在同一个线程-GetCurrentThreadId()用法

    线程 在一个程序中,这些独立运行的程序片断叫作"线程"(Thread),利用它编程的概念就叫作"多线程处理".利用线程,用户可按下一个按钮,然后程序会立即作出响 ...