zoukankan      html  css  js  c++  java
  • hdu 1025 Constructing Roads In JGShining's Kingdom

    本题明白题意以后,就可以看出是让求最长上升子序列,但是不知道最长上升子序列的算法,用了很多YY的方法去做,最后还是超时,

    因为普通算法时间复杂度为O(n*2),去搜了题解,学习了一下,感觉不错,拿出来分享一下。

     1 #include <stdio.h>
     2 #include <string.h>
     3 
     4 #define N 500005
     5 int map[N], dp[N];
     6 
     7 int main ()
     8 {
     9     int x, y, n, i, j = 0;
    10     
    11     while (scanf ("%d", &n) != EOF)
    12     {
    13         for (i=0; i<n; i++)
    14         {
    15             scanf ("%d %d", &x, &y);
    16             map[x] = y;
    17         }
    18         
    19         memset (dp, 0, sizeof(dp));
    20         
    21         dp[1] = map[1];
    22         
    23         int low, up, mid, len = 1;
    24         for (i=2; i<=n; i++)
    25         {
    26             low = 1;
    27             up = len;
    28             
    29             while (low <= up)
    30             {
    31                 mid = (low + up) / 2;
    32                 if (dp[mid] > map[i])
    33                     up = mid - 1;
    34                 else
    35                     low = mid + 1;
    36             }
    37             
    38             dp[low] = map[i];
    39             if (low > len)
    40                 len ++;
    41         }
    42         if (len == 1)
    43             printf ("Case %d:
    My king, at most 1 road can be built.
    
    ", ++j);
    44         else
    45             printf ("Case %d:
    My king, at most %d roads can be built.
    
    ", ++j, len);
    46     }
    47     
    48     return 0;
    49 }
    View Code
    本文为博主原创文章,未经博主允许不得转载。
  • 相关阅读:
    File操作
    集合
    几个python资料地址
    Case1-用list写shoppingcart
    字符串操作
    运算-Dictionary
    运算-list
    Python数据类型
    标准库和库导入
    Pycharm
  • 原文地址:https://www.cnblogs.com/alihenaixiao/p/4091998.html
Copyright © 2011-2022 走看看