Yin的笔记本

vuePress-theme-reco Howard Yin    2021 - 2025
Yin的笔记本 Yin的笔记本

Choose mode

  • dark
  • auto
  • light
Home
Category
  • CNCF
  • Docker
  • namespaces
  • Kubernetes
  • Kubernetes对象
  • Linux
  • MyIdeas
  • Revolution
  • WebRTC
  • 云计算
  • 人工智能
  • 分布式
  • 图像处理
  • 图形学
  • 微服务
  • 数学
  • OJ笔记
  • 博弈论
  • 形式语言与自动机
  • 数据库
  • 服务器运维
  • 编程语言
  • C
  • Git
  • Go
  • Java
  • JavaScript
  • Python
  • Nvidia
  • Rust
  • Tex
  • Shell
  • Vue
  • 视频编解码
  • 计算机网络
  • SDN
  • 论文笔记
  • 讨论
  • 边缘计算
  • 量子信息技术
Tag
TimeLine
About
查看源码
author-avatar

Howard Yin

303

Article

153

Tag

Home
Category
  • CNCF
  • Docker
  • namespaces
  • Kubernetes
  • Kubernetes对象
  • Linux
  • MyIdeas
  • Revolution
  • WebRTC
  • 云计算
  • 人工智能
  • 分布式
  • 图像处理
  • 图形学
  • 微服务
  • 数学
  • OJ笔记
  • 博弈论
  • 形式语言与自动机
  • 数据库
  • 服务器运维
  • 编程语言
  • C
  • Git
  • Go
  • Java
  • JavaScript
  • Python
  • Nvidia
  • Rust
  • Tex
  • Shell
  • Vue
  • 视频编解码
  • 计算机网络
  • SDN
  • 论文笔记
  • 讨论
  • 边缘计算
  • 量子信息技术
Tag
TimeLine
About
查看源码
  • 带权活动选择

    • 解析

    带权活动选择

    vuePress-theme-reco Howard Yin    2021 - 2025

    带权活动选择


    Howard Yin 2020-12-27 14:41:04 数学OJ笔记算法

    Description

    给定nnn个活动,活动aia_iai​表示为一个三元组(si,fi,vi)(s_i,f_i,v_i)(si​,fi​,vi​),其中si表示活动开始时间,fi表示活动的结束时间,viv_ivi​表示活动的权重, si<fis_i<f_isi​<fi​。带权活动选择问题是选择一些活动,使得任意被选择的两个活动aia_iai​和aja_jaj​执行时间互不相交,即区间[si,fi)[s_i,f_i)[si​,fi​)与[sj,fj)[s_j,f_j)[sj​,fj​)互不重叠,并且被选择的活动的权重和最大。请设计一种方法求解带权活动选择问题。

    Input

    第一行输入M(M≤10)M(M\leq 10)M(M≤10)表示有MMM组数据。每组数据输入整数N(N≤10000)N(N\leq 10000)N(N≤10000), 接下来输入NNN个活动。

    Output

    输出MMM行正整数,第i行表示第i组数据的能够选择活动最大权值和。

    # 解析

    和01背包问题类似,使用动态规划方法。

    首先将活动按结束时间顺序进行排序。定义从最早结束的活动到第iii个结束的活动的最优排列方案为f(i)f(i)f(i),与结束时间早于sss的活动集合的最优排列方案为为g(s)=f(j)(fj≤s)g(s)=f(j)(f_j\leq s)g(s)=f(j)(fj​≤s),那么f(i)f(i)f(i)满足最优子结构特性:

    f(i)=max{f(i−1),g(si)+vi}f(i)=max\{f(i-1),g(s_i)+v_i\} f(i)=max{f(i−1),g(si​)+vi​}

    显然,f(i)f(i)f(i)的重叠子问题集合为:

    {f(i)∣1≤i≤n}\{f(i)|1\leq i\leq n\} {f(i)∣1≤i≤n}

    空间复杂度为o(n)o(n)o(n),每个子问题都只需要计算其之前的两个值,因此时间复杂度为O(n)O(n)O(n),再加上开始时的排序时间,时间复杂度为O(nlogn)O(nlog\ n)O(nlogn)

    帮助我们改善此页面!
    创建于: 2020-12-27 14:41:40

    更新于: 2020-12-27 14:41:40