洛谷1020拦截导弹(NOIP1999)
来源:互联网 发布:.name域名是什么 编辑:程序博客网 时间:2024/06/05 20:14
洛谷1020拦截导弹(NOIP1999)
http://www.sakurasake.icoc.me/nd.jsp?id=2#_np=2_327
题目描述
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。
输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。
输入格式:
一行,若干个正整数最多100个。
输出格式:
2行,每行一个整数,第一个数字表示这套系统最多能拦截多少导弹,第二个数字表示如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。
输入输出样例
输入样例#1:
389 207 155 300 299 170 158 65
输出样例#1:
6 2
分析:
第一问和T1差不多,第二问是个难点,最简单的办法是使用定理:一个序列中不上升子序列的最小覆盖数等于子序列中最长上升序列的长度
#include<bits/stdc++.h>using namespace std;int n=1,ans1=0,ans2=0;intf[10005]={0},g[10005]={0},a[10005];int main(){ while(scanf("%d",&a[n])!=EOF)n++; n--; for(int i=1;i<=n;i++) { f[i]=1;g[i]=1; } for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) if(a[j]>a[i])f[i]=max(f[i],f[j]+1); for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) if(a[j]<a[i])g[i]=max(g[i],g[j]+1); for(int i=1;i<=n;i++) { if(f[i]>ans1)ans1=f[i]; if(g[i]>ans2)ans2=g[i]; // printf("%d%d\n",f[i],g[i]); } cout<<ans1<<endl; cout<<ans2<<endl; return 0;}
阅读全文
0 0
- 洛谷1020拦截导弹(NOIP1999)
- 【3005】拦截导弹问题(noip1999)
- [NOIP1999]拦截导弹
- rqnoj[NOIP1999]拦截导弹
- rqnoj[NOIP1999]拦截导弹
- NOIP1999 拦截导弹
- NOIP1999拦截导弹
- NOIP1999拦截导弹
- 【NOIP1999】拦截导弹
- [NOIP1999]拦截导弹
- 【NOIP1999】拦截导弹
- 【原创】【NOIP1999】拦截导弹
- 拦截导弹noip1999
- [NOIP1999]拦截导弹
- 【NOIP1999】拦截导弹
- 【动态规划】NOIP1999 拦截导弹
- noip1999(提高组) 导弹拦截
- noip1999导弹拦截c++语言
- 今天我们来玩游戏(博弈)
- ACM第五次比赛题目及标准程序(数据结构基础)
- nyoj -- 16 矩形嵌套
- spring初学(1)
- SQL语言的优点简单总结
- 洛谷1020拦截导弹(NOIP1999)
- DOS批处理
- Linux部署mysql
- 传说中的ACM大牛们
- String源码分析,解读面试题
- 不配置OpenCV环境,以动态链接的方式使用OpenCV
- 避免使用终结方法。
- 集合
- TensorFlow(二) 基本用法