There's an O(3^n poly(n))-time algorithm. The steps are
- Find all sets of vertices that can be arranged in a path.
- Solve the resulting set packing problem.
Step 1 is accomplished by a dynamic program whose table is indexed by pairs consisting of (a) the set of vertices in the path (b) the first vertex in the path. Step 2 is also accomplished by a dynamic program, with a table mapping sets of vertices to the maximum value attainable by disjoint paths on that subgraph.
The recurrence for Step 1 is
IsPath({v}, v) = true (for all vertices v)
IsPath(S, v) = exists w in S - {v} such that v->w is an arc and IsPath(S - {v}, w) (for all sets of vertices S, for all v in S).
Now gather all sets P such that there exists v in P such that IsPath(P, v). Compute the score for each of these paths.
BestCover({}) = 0
BestCover(S) = max Score(P) + BestCover(S - P) over all P subset of S such that P is a path (for all nonempty S).