Resource allocation via dynamic programming in activity networks