题目

现在有一种拦截系统,第一发拦截可以是任意高度,但是之后的拦截高度不能比上次高。为了拦截下所有的炮弹,最少需要准备几套拦截系统?

思路

可能是语文没学好吧,一开始被题意卡了一下。(而且题目连数据范围也没给???)
比如这种数据:

Input
7 500 400 300 350 120 200 150
Output
2
HINT
第一套系统:①500 ②400 ③300 ⑥200 ⑦150
第二套系统:④350 ⑤120

比赛的时候感觉贪心可做。但又很像动态规划里的LIS,好在前段时间组队赛的时候看了看板子上的LIS
动态规划:最长上升子序列(LIS)
LIS(最长上升子序列)问题的三种求解方法以及一些例题

赛后想了想关于贪心的思路:对于当前的导弹,若当前所有的拦截系统都不能挡住,则新开一个拦截系统。若有,就在已有的拦截系统里寻找一个比他高同时最接近他高度的系统(尽量减少损失),并更新该系统为高度最低的导弹。

AC代码(dp - LIS)

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#define mst(a) memset(a, 0, sizeof(a))
using namespace std;
const int maxn = 1e4+5;
int a[maxn], dp[maxn];int main()
{int T, mmax, num;while( ~scanf("%d",&T) ){if(T==0){printf("0\n");continue;}mst(dp);mst(a);for( int i = 0; i < T; i++ ){scanf("%d",&a[i]);dp[i] = 1;}for( int i = 1; i < T; i++ ){for( int j = 0; j < i; j++ ){if( a[j] < a[i] ){dp[i] = max(dp[i], dp[j]+1);}}}sort(dp, dp+T);printf("%d\n",dp[T-1]);}return 0;
}

AC代码(贪心)

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#define mst(a) memset(a, 0, sizeof(a))
using namespace std;
const int maxn = 1e4+5;
const int INF = 0x3f3f3f3f;
int a[maxn], dp[maxn];int main()
{int n, cnt, dmin;bool flag;while( ~scanf("%d",&n) ){mst(a);mst(dp);for( int i = 0; i < n; i++ )scanf("%d", &a[i]);cnt = 0;dp[cnt] = a[0];int mark;for( int i = 1; i < n; i++ ){dmin = INF;flag = false;for( int j = 0; j <= cnt; j++ ){if( a[i] < dp[j] ){int d = dp[j] - a[i];if( d < dmin ){dmin = min(dmin, dp[j]-a[i]);mark = j;}flag = true;}}if( flag )  dp[mark] = a[i];else dp[++cnt] = a[i];}printf("%d\n",cnt+1);}return 0;
}

转载于:https://www.cnblogs.com/JinxiSui/p/9740555.html

HDU 1257 - 最少拦截系统 ( LIS / 贪心 )相关推荐

  1. hdu 1257最少拦截系统(贪心)

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

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

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

  3. 题解报告:hdu 1257 最少拦截系统(贪心)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1257 Problem Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是 ...

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

    解题思路:用一个vector存下数据,从头开始非递增遍历,并把符合条件的删除,一次操作,ans++,当vector为空时退出循环.(PS:学到了vector的erase操作,竟然还有返回值,涨姿势了) ...

  5. hdu 1257最少拦截系统 动态规划

    最少拦截系统 Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Problem Desc ...

  6. HDU 1257 最少拦截系统【最长上升子序列】

    解题思路:可以转化为求最长上升子序列来做,还是可以用an与按升序排列后的an求LCS来做,为防止超时,用滚动数组优化一下就可以了. 最少拦截系统 Time Limit: 2000/1000 MS (J ...

  7. HDU 1257 - 最少拦截系统

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

  8. HDU 1257 最少拦截系统

    /* 若N个数 为递增序列 则最多需要N个导弹系统 贪心 + DP 见注释 */ #include <stdio.h> #define MAX 100000 int height[MAX] ...

  9. hdu 1257 最少拦截系统 (DP)

    点击打开链接 #include"stdio.h" int main() {int a[10011],b[10011];int i,j,c,n;while(scanf("% ...

最新文章

  1. CTF---Web入门第十三题 拐弯抹角
  2. 满有趣的屏幕快捷键;)
  3. 为了在全球“买买买”,阿里工程师自研了一套海外HR系统
  4. 【QGIS入门实战精品教程】3.3:QGIS如何打开ArcGIS创建的文件数据库(GDB)?
  5. 最长不重复子串python_python经典算法题:无重复字符的最长子串
  6. 15个著名的设计心理学原理以及在设计中的应用
  7. 服务器 设置 将 Tomcat 注册 到系统服务 及使用方法
  8. Struts2配置国际化文件
  9. 读取和修改caffemodel文件
  10. Mysql Alter table 操作
  11. 远程读取mysql_远程获取数据库和文件的方法
  12. java 进度条实现原理_java进度条功能的实现原理是什么?实例展示
  13. 【HUSTOJ】1049: 字符图形5-星号梯形
  14. 用树莓派做MIDI HOST,给合成器外接MIDI键盘
  15. 运算器设计(Logisim实现)
  16. 田野调查手记·浮山篇(七)
  17. 192-神以恩典为你年岁的冠冕
  18. 刘强东给京东高管降薪:2千多位总监兄弟工资打8折,并拿出100亿保障”兄弟“基础住房
  19. 基于ADN8830 TEC控制器实现温度控制电路设计
  20. html去重三种方法,sql语句_ 的三种去重方法

热门文章

  1. cisco aaa 授权后门测试
  2. 用于制图、写电子邮件、创建条形码控件Aspose.Total
  3. MySQL中更改表操作
  4. 如何为ccflow工作流引擎增加一个优先级PRI?
  5. 谢尔盖.布林的早期思想_谷歌联合创始人谢尔盖·布林(Sergey Brin)谈人工智能与自动化...
  6. react前端开发_是的,React正在接管前端开发。 问题是为什么。
  7. gzip格式分析与识别
  8. 手动部署OpenStack环境(六:出现的问题与解决方案总结)
  9. (C++)1023 组个最小数 简单贪心
  10. 解决日常bug的正确姿势