上の桁から数を決めていきますが、「上限値($K$)に張り付いているか、緩んだか」という状態を保持します。「張り付いている」というのは、「その桁までずっと上限値と一致するように桁の数を決めた場合」を意味し、この場合は上限値の制約から、次の桁に利用できる数に制限が掛かります。まですべての数を使えます。途中まで決めたとき、その先の決め方に影響を与えるのは、すでに決めた中で右端の数字だけです。ある場合の並べ方の個数」とやりたくなる気持ちがありますが、到底間に合いません。ここで、「その先を決めるときに重要なのは、右端の数が残りの数の上から何番目か」が同じであれば、その具体的な集合の構成がどうであれ、並べ方の個数が全く同じであることに気づくと素晴らしいです。的に、ビットで管理する集合を添字とします。メモ化再帰で書くと楽です。