• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

  • 博客园
  • 联系
  • 订阅
  • 管理

View Post

HDU 1257

分析:
  依次保存现在每个拦截系统能拦截的最高的高度,接下来输入的每一个高度,依次和这若干个拦截系统现在所能拦截的最高高度比较,若某次该输入的高度小于某个拦截系统的最高高度,就替代这个拦截系统的最高高度;若比这些拦截系统的高度都高,就重新创造一个拦截系统并将这次输入的高度作为新建拦截系统的最高高度.

 

 

 

代码如下:

 

 

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <fstream>
 5 #include <ctime>
 6 #include <cmath>
 7 #include <cstdlib>
 8 #include <algorithm>
 9 #include <set>
10 #include <map>
11 #include <list>
12 #include <stack>
13 #include <queue>
14 #include <iterator>
15 #include <vector>
16 
17 using namespace std;
18 
19 #define LL long long
20 #define INF 0x3f3f3f3f
21 #define MOD 1000000007
22 #define MAXN 10000010
23 #define MAXM 1000010
24 #define inf 0x7fffffffffffffff
25 #define maxf 0x7fffffff
26 
27 
28 int a[MAXN], b[MAXN];   //数组a保存导弹高度,数组b保存每套系统的最高拦截高度
29 
30 int main()
31 {
32     int n;
33     while(scanf("%d", &n)==1)
34     {
35         int cnt = 0;    //拦截系统的数量
36         b[0] = 0;
37         for(int i = 0; i < n; i++ )
38         {
39             scanf("%d", &a[i]);
40             for(int j = 0; j <= cnt; j++ )    //每次输入的高度要与现在所有的拦截系统比较
41             {
42                 if(a[i]<b[j])
43                 {
44                     b[j] = a[i];
45                     break;
46                 }
47                 else if(j == cnt)
48                 {
49                     cnt++;
50                     b[cnt] = a[i];
51                     break;
52                 }
53             }
54         }
55         printf("%d\n", cnt);
56     }
57 
58     return 0;
59 }

 

posted on 2016-08-13 16:14  tony-cao  阅读(134)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3