fork download
  1. class Solution:
  2. def maxProfit(self, n: int, p, f, h, b: int) -> int:
  3. def sol(u,curr,last):
  4.  
  5. if dp[u][curr][last]!=float('-inf'):
  6. return dp[u][curr][last]
  7. # p=0
  8.  
  9. t1=0
  10. t2=0
  11. for v in adj[u]:
  12. t1+=sol(v,curr,0)
  13. if last==0:
  14. if curr+p[u]//2<=b:
  15. t2+=sol(v,curr,1)+f[u]-p[u]//2
  16. else:
  17. if curr+p[u]<=b:
  18. t2+=sol(v,curr,1)+f[u]-p[u]
  19.  
  20. dp[u][curr][last]=max(t1,t2)
  21. return max(t1,t2)
  22.  
  23.  
  24.  
  25. def df1(u):
  26. vis[u]=True
  27. for v in adj[u]:
  28. if not vis[u]:
  29. df1(v)
  30. topo.append(u)
  31.  
  32. adj=[[] for _ in range(n)]
  33. for u,v in h:
  34. adj[u-1].append(v-1)
  35.  
  36. dp=[[[float('-inf') for _ in range(2)] for _ in range(b+1)] for _ in range(n)]
  37. topo=[]
  38. vis=[False for _ in range(n)]
  39. # for i in range(n):
  40. # if not vis[i]:
  41. # df1(i)
  42.  
  43. # print(topo)
  44. # vis=[False for _ in range(n)]
  45. return sol(0,0,0)
  46.  
  47.  
  48.  
Success #stdin #stdout 0.12s 14216KB
stdin
Standard input is empty
stdout
Standard output is empty