How about starting from the end of the node list and working backwards (instead of forwards like you current program). Do it in steps, and record the values to the end as you go through, so you don't traverse the same path twice. For example, in this:
7 8 9 10
7 9 10
... you've worked out the max value for getting from 7 to 10, so store that away somewhere. Then, if you want to get from 6 to 10, you actually only need to get from 6 to 7, then add the value of that one hop to the max value already stored in 7. You never need to go through all the combinations of 6 to 10.
Of course, in a prog, you'd start by checking 9 to 10, then move backwards.
Am I making sense here, or just rambling?!