zoukankan      html  css  js  c++  java
  • toj 4071 最长不下降子序列

    题目描述:给出2D空间中的n只鸟的坐标,射手对其进行射击,要求射击的鸟的坐标越来越大,即对于第i和第i+1只鸟,要求满足:xi<=xi+1 && yi <= yi+1。求最多能射击多少只鸟。

    思路:将所有点按照x坐标排序,x坐标相同则按照y坐标排序。则x方向上可以满足限制,对y方向上求最长不下降子序列即可。由于数据量较大,需要采取nlogn的优化算法。

     1 #include <algorithm>
     2 #include <iostream>
     3 #include <cstdio>
     4 using namespace std;
     5 
     6 const int N = 100000;
     7 int s[N];
     8 int top;
     9 
    10 struct Node 
    11 {
    12     int x, y;
    13 } node[N];
    14 
    15 bool cmp( Node a, Node b )
    16 {
    17     if ( a.x != b.x ) return a.x < b.x;
    18     return a.y < b.y;
    19 }
    20 
    21 int main ()
    22 {
    23     int t;
    24     scanf("%d", &t);
    25     while ( t-- )
    26     {
    27         int n;
    28         scanf("%d", &n);
    29         for ( int i = 0; i < n; i++ )
    30         {
    31             scanf("%d%d", &node[i].x, &node[i].y);
    32         }
    33         sort( node, node + n, cmp );
    34         top = 0;
    35         s[top++] = node[0].y;
    36         for ( int i = 1; i < n; i++ )
    37         {
    38             if ( node[i].y >= s[top - 1] )
    39             {
    40                 s[top++] = node[i].y;
    41             }
    42             else
    43             {
    44                 int tmp = upper_bound( s, s + top, node[i].y ) - s;
    45                 s[tmp] = node[i].y;                
    46             }
    47         }
    48         printf("%d
    ", top);        
    49     }
    50     return 0;
    51 }

     

  • 相关阅读:
    客户(项目)经理应具备那些基本心理素质
    js 添加数组 删除数组
    c# ifram 刷新父页面
    [转].Net ajax检测用户名是否重复
    js 自动执行方法
    js 层 分页显示选择用户名
    c# Cookie的操作
    c# 取IE地址值
    js 弹出层无刷新分页
    iframe 无边框
  • 原文地址:https://www.cnblogs.com/huoxiayu/p/4401727.html
Copyright © 2011-2022 走看看