Meta 面試中的樹形 DP 題目。本文通過員工休假優化問題,展示樹形動態規劃的應用,oavoservice 助你掌握高階 DP 技巧。
📋 問題背景
公司組織結構是一棵樹,每個員工有休假天數需求。 規則:如果員工休假,其直接下屬不能休假。 目標:求最大總休假天數。
🎯 核心思路
這是經典的 樹形 DP 問題,類似「打家劫舍 III」。
解法:樹形 DP
class Employee:
def __init__(self, id, vacation_days):
self.id = id
self.vacation_days = vacation_days
self.subordinates = []
def max_vacation_days(root):
def dfs(node):
if not node:
return (0, 0)
# take: 當前員工休假
# not_take: 當前員工不休
take = node.vacation_days
not_take = 0
for sub in node.subordinates:
sub_take, sub_not_take = dfs(sub)
# 如果當前員工休假,下屬不能休
take += sub_not_take
# 如果當前員工不休假,下屬可選擇休或不休
not_take += max(sub_take, sub_not_take)
return (take, not_take)
take, not_take = dfs(root)
return max(take, not_take)
時間複雜度: O(n) 空間複雜度: O(h)
🚀 擴展:多層約束
def max_vacation_with_constraints(root, max_consecutive):
# 處理連續層級約束的實作
pass
💼 oavoservice 助力
樹形 DP - 狀態定義和轉移 優化技巧 - 記憶化搜尋 擴展能力 - 處理複雜約束
聯繫 oavoservice,專業 DP 面試輔助!
標籤: #Meta #動態規劃 #樹形DP #VO輔助 #面試輔助 #一畝三分地
需要面試真題? 立刻聯繫微信 Coding0201,獲得真題。