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

Kimi LeetCode 3530. 有向无环图中合法拓扑排序的最大利润 Python3实现

以下是 LeetCode 3530 有向无环图中合法拓扑排序的最大利润 的 Python3 实现。

思路概述

- `n ≤ 22`,使用状压 DP(Bitmask DP)。
- `need[i]`:节点 `i` 的所有直接前驱的位掩码。
- `dp[mask]`:已经选了 `mask` 中这些节点,能获得的最大利润。
- 转移时,已选节点数为 `popcount(mask)`,下一个位置为 `pos = bitCount + 1`。枚举所有不在 mask 中且所有前驱都已选的节点 `i`,更新 `dp[mask | (1<<i)]`。
- 最终答案为 `dp[(1<<n) - 1]`。

复杂度

- 时间:`O(2^n · n)`,由于 `n ≤ 22`,约为 `2200` 万级别。
- 空间:`O(2^n)`

完整代码

```python
class Solution:
def maxProfit(self, n: int, edges: List[List[int]], score: List[int]) -> int:
max_mask = 1 << n

# need[i] = 节点 i 的所有前驱节点的位掩码
need = [0] * n

# dp[mask] = 已选 mask 中节点时的最大利润
dp = [-1] * max_mask
dp[0] = 0

# 构建前驱掩码
for u, v in edges:
need[v] |= 1 << u

for mask in range(max_mask):
if dp[mask] == -1:
continue

pos = mask.bit_count() + 1 # 下一个位置(1-based)

for i in range(n):
# i 不在 mask 中,且 i 的所有前驱都已在 mask 中
if (mask & (1 << i)) == 0 and (need[i] & mask) == need[i]:
next_mask = mask | (1 << i)
dp[next_mask] = max(dp[next_mask], dp[mask] + score[i] * pos)

return dp[max_mask - 1]
```

关键点说明

1. `need[i]` 的构建:`need[v] |= 1 << u` 表示节点 `u` 必须在 `v` 之前。转移条件 `(need[i] & mask) == need[i]` 等价于 `need[i]` 是 `mask` 的子集,即 `i` 的所有前驱都已处理。
2. 位置计算:`pos = mask.bit_count() + 1`,因为 `mask` 中已有 `bit_count()` 个节点,下一个节点自然排在第 `bit_count() + 1` 位。
3. DP 初始化:`dp[0] = 0`,其余为 `-1` 表示不可达。由于 `score[i] ≥ 1` 且 `pos ≥ 1`,利润恒为正,`-1` 作为不可达标记是安全的。
4. 枚举顺序:按 `mask` 从小到大枚举,保证每个状态只被前面的状态更新一次。

http://www.jsqmd.com/news/1177085/

相关文章:

  • 提升收益选酒店品牌时,尚客优7为何更像合适选择 - 科技焦点
  • UVDoc:重塑文档图像矫正新范式,OCR识别精度革命性突破
  • 如何搭建PUBG地图黑客:从零开始的完整教程
  • HS2-HF Patch终极指南:如何用3步解决Honey Select 2的70+个痛点
  • 4 权限控制DCL操作
  • 构建企业级AI代理平台:高性能可扩展的中间件解决方案
  • 2026年AI漫剧制作厂商推荐榜 核心差异与选型建议
  • Cocos Creator UI开发实战:开心消消乐界面设计与交互实现
  • 企业级API网关架构深度解析:IBM Microgateway的技术实现与选型指南
  • 04-03-YooAsset源码-Unity构建映射与依赖分析(BuildMap)
  • Java 面向对象基础:构造方法、toString重写与封装实战详解
  • 【Midjourney批量生成终极指南】:20年AI图像工程师亲授17种高精度可控批量工作流(含V6.1最新API+Discord Bot实战)
  • 《机械工厂6S白皮书05|第4章 执行核心:6S执行力三问诀——跳出“员工不听话“误区,把人员管理难题转化为系统优化问题,打通全员长效自主落地通道》
  • AI推荐结果怎么优化:适合深圳少儿素质培训机构的GEO服务商哪家好?全程零代码SAAS操作
  • 2026年不错的AI漫剧制作平台 核心优势与适配场景
  • 可白嫖源码---课程设计--毕业设计--springboot3中医养生药膳推荐系统[编号:project11931](案例分析)-附源码
  • 用Ai开发微信小程序,没想到那么简单(三)视频提取
  • RAG 实战教学完全指南
  • HLW8112芯片软件实现代码(8)
  • closeEvalDialog is not defined、pages.json 语法、硬编码 ID ——记几个低级错误
  • 去烟味喷雾效果好的有哪些?核心特质解析与全场景选购使用指南 - 行业洞察分析师
  • Socket网络编程入门:UDP+TCP双案例手把手教你写服务器
  • 免费开源2D动画制作软件:OpenToonz完整指南
  • Glorytun安全配置详解:保护你的UDP隧道通信的完整策略
  • 快速上手PUBG地图黑客:5分钟搭建实战指南
  • 开心消消乐分数系统详解:如何设计刺激玩家的积分机制
  • 如何用PrivateGPT快速搭建企业级私有化AI应用:完整指南
  • morss部署教程:从本地到云端的完整步骤指南
  • 【Matlab】不确定干扰下无人机鲁棒控制实现
  • 我的第一个工具调用Agent:从零构建“知识库+计算器+时间+文件”四合一智能体