zoukankan      html  css  js  c++  java
  • hdu--1160--LIS+打印路径

    这题做完  就去吃饭了...

    快1年了 没有正常的饮食....

    这题 数据蛮小的 1000可以用O(n^2)水过 而且只花了0ms

    一般来说 打印路径是正序输出 而我们记录的时候都是 逆序记录的  所以 借用下stack特别好用

          touch    me

     1 #include <iostream>
     2 #include <algorithm>
     3 #include <stack>
     4 using namespace std;
     5 
     6 const int size = 1010;
     7 struct data
     8 {
     9     int id;
    10     int w;
    11     int speed;
    12 }mice[size];
    13 int road[size];
    14 int len[size];
    15 stack< int >s;
    16 
    17 bool cmp( data p , data q )
    18 {
    19     if( p.w == q.w )
    20         return p.speed>q.speed;
    21     return p.w<q.w;     
    22 }
    23 
    24 bool judge( data& p , data& q )
    25 {
    26     if( q.w>p.w && q.speed<p.speed )
    27         return true;
    28     return false;
    29 }
    30 
    31 int main()
    32 {
    33     cin.sync_with_stdio(false);
    34     int ans , pos , cnt;
    35     cnt = pos = 1;
    36     ans = 0;
    37     while( cin >> mice[cnt].w >> mice[cnt].speed )
    38     {
    39         mice[cnt].id = cnt;
    40         len[cnt] = 1;
    41         road[cnt] = -1;
    42         cnt++;
    43     }
    44     sort( mice+1 , mice+cnt+1 , cmp );
    45     while( !s.empty() )
    46         s.pop();
    47     for( int i = 1 ; i<cnt ; i++ )
    48     {
    49         for( int j = i+1 ; j<=cnt ; j++ )
    50         {
    51             if( judge( mice[i] , mice[j] ) )
    52             {
    53                 if( len[j] < len[i]+1 )
    54                 {
    55                     len[j] = len[i]+1;
    56                     road[j] = i;
    57                 }
    58                 if( len[j] > ans )
    59                 {
    60                     ans = len[j];
    61                     pos = j;
    62                 }
    63             }
    64         }
    65     }
    66     cout << ans << endl;
    67     for( int i = pos ; ; i=road[i] )
    68     {
    69         s.push( mice[i].id );
    70         if( road[i] == -1 )
    71             break;
    72     }
    73     while( !s.empty() )
    74     {
    75         cout << s.top() << endl;
    76         s.pop();
    77     }
    78     return 0;
    79 }
    View Code
    just follow your heart
  • 相关阅读:
    lintcode-144-交错正负数
    lintcode-143-排颜色 II
    lintcode-142-O(1)时间检测2的幂次
    lintcode-141-x的平方根
    lintcode-138-子数组之和
    postman-----使用CSV和Json文件实现批量接口测试
    postman—创建collection,执行collection和批量执行
    postman-变量
    postman-鉴权
    Postman—cookie
  • 原文地址:https://www.cnblogs.com/radical/p/3853799.html
Copyright © 2011-2022 走看看