0
点赞
收藏
分享

微信扫一扫

赶紧收藏!2024 年最常见 100道 Java 基础面试题(二十三)

you的日常 2024-05-02 阅读 9
算法

算法提高之友好城市

  • 核心思想:线性dp

    • 在这里插入图片描述

      • 将所有路按上坐标从小到大排序后 道路的数量就是下坐标的最长的上升子序列
      • 因为上坐标和下坐标同时增加 一定不会交叉
  •   #include <iostream>
      #include <cstring>
      #include <algorithm>
      
      using namespace std;
      typedef pair<int, int> PII;
      const int N = 5010;
      #define x first
      #define y second
      
      int f[N];
      int n;
      PII p[N];  //对组存 first存上坐标
      
      int main()
      {
          cin>>n;
          for(int i=0;i<n;i++) cin>>p[i].x>>p[i].y;
          
          sort(p,p+n);
          for(int i=0;i<n;i++)  //对下坐标 求最长上升子序列
          {
              f[i] = 1;
              for(int j=0;j<i;j++)
                  if(p[i].y > p[j].y) f[i] = max(f[i],f[j] + 1);  
          }
          int res=0;
          for(int i=0;i<n;i++)
          {
              res = max(res,f[i]);
          }
          cout<<res<<endl;
      }
    
举报

相关推荐

0 条评论