当前位置: 首页 > article >正文

力扣1235.规划兼职工作

力扣1235.规划兼职工作

  • 动态规划 + 二分

    • 将所有工作按照结束时间排序
    • f[i]表示前i个工作可获取的最大收益
    • 状态转移:取第i个工作,f[i] = profit[i] + f[j],其中j为结束时间小于i的开始时间的最大数
    • 不取第i个工作,f[i] = f[i-1]
    • 可以通过二分找到 j
    • 优化:在这里插入图片描述
  •   class Solution {
      public:
          int jobScheduling(vector<int>& startTime, vector<int>& endTime, vector<int>& profit) {
              int n = startTime.size();
              //三元组
              vector<array<int,3>> jobs(n);
              for(int i=0;i<n;i++)
                  jobs[i] = {endTime[i],startTime[i],profit[i]};
              //按照结束时间排序
              ranges::sort(jobs,[](auto &a,auto &b){return a[0] < b[0];});
      
              vector<int> f(n+1);
              for(int i=0;i<n;i++)
              {
                  //j = upper_bound() - jobs.begin() - 1 + 1;
                  //以i的开始时间作为结束时间在jobs里二分
                  int j = upper_bound(jobs.begin(),jobs.begin()+i,array<int,3>{jobs[i][1],INT_MAX}) - jobs.begin();
                  f[i+1] = max(f[i],f[j] + jobs[i][2]);
              }
              return f[n];
          }
      };
    

http://www.kler.cn/a/286003.html

相关文章:

  • 大阪OSAKA分子泵电源TC163HTC203TC353TC523TC1104TC553TC1813手侧
  • 地理空间查询的奥秘:SQL中的高效数据探索
  • OpenAI GPT3 Search API not working locally
  • MySQL数据库规范化:避免数据冗余与保持数据一致性
  • Python酷库之旅-第三方库Pandas(114)
  • 5.4二叉树——经典OJ题
  • 【扩散模型(七)】IP-Adapter 与 IP-Adapter Plus 的具体区别是什么?
  • python安装protobuf记录
  • 第十三章 rust日志库使用介绍
  • STL-常用容器
  • 嵌入式Linux:信号分类
  • Linux中全局变量配置,/etc/profile.d还是/etc/profile
  • 【python入门到精通专题】2.不基础的基础知识
  • 异步编程详解
  • C语言 面向对象编程
  • R语言绘制可用于论文发表的生存曲线图|科研绘图·24-08-25
  • [Leetcode 51][Hard]-n皇后问题-回溯
  • HTML沙漏爱心
  • 换毛季猫咪化身掉毛怪,宠物浮毛如何清理?推荐用宠物空气净化器
  • 软件测试-Selenium+python自动化测试