-void
-print_constrained_break_nodes (vector<Constrained_break_node> const &arr)
-{
- for (vsize i = 0; i < arr.size (); i++)
- {
- printf ("node %d: ", (int)i);
- arr[i].print ();
- }
-}
-
-/**
- We use the following optimal substructure. Let W(A) be our weight function.
-
- Let A_{k,n} = (a_{k,n,1}, ... a_{k,n,k}) be the optimal set of line breaks
- for k systems and n potential breakpoints. a_{k,n,k} = n (it is the end of
- the piece)
-
- Then A_{k+1, m} is contructed from
- min_ {k < j < m} ( W(A_{k,j} :: m) )
- where by A::m we denote appending m to the list A
-
+/*
+ We use the following optimal substructure. Let W(A) be our weight function.
+
+ Let A_{k,n} = (a_{k,n,1}, ... a_{k,n,k}) be the optimal set of line breaks
+ for k systems and n potential breakpoints. a_{k,n,k} = n (it is the end of
+ the piece)
+
+ Then A_{k+1, m} is contructed from
+ min_ {k < j < m} ( W(A_{k,j} :: m) )
+ where by A::m we denote appending m to the list A
+
+ Indices in the code:
+
+ The above algorithm makes it easy to end at a point before the end of the
+ score (just find A_{k,m} for some m < breaks_.size () - 1). However, we must
+ add information for starting at a point after the beginning. One constructor
+ allows the specification of a list of starting columns, start_. We then have
+ start_.size () different solution arrays. state_[i] is the array for the
+ solution starting at column number start_[i].
+
+ The indicies "start" and "end" refer to the index in the start_ array of the
+ desired starting and ending columns.
+
+ each solution array looks like
+ a_{1,1,1} a_{2,1,2} a_{3,1,3} . . .
+ X a_{2,2,2} a_{3,2,3} . . .
+ X X a_{3,3,3} . . .
+ . . . .
+ . . . .
+ where the X's mark invalid solutions (can't have more systems than
+ breakpoints). Note that each value is of the form a_{x,n,x}. This is because
+ a breakpoint of the form a_{x,n,x-1} will also be called a_{x-1,m,x-1} for
+ some m < n. Each cell in the array stores the value of its m (ie. the
+ ending breakpoint of the previous line) as "prev_".
+
+ For finding A_{sys, brk}, let "me" be the (sys_count,brk) cell in our
+ solution array (state_[start][sys * rank + brk]).
+
+ Then A_{sys, brk} = A_{sys - 1, me.prev_} :: me