Skip to main content
1 of 2
march
  • 24.9k
  • 2
  • 48
  • 108

I believe the following works. It generates all$^1$ candidate lists $\beta_i$ such that $\sum_i i\beta_i' \leq d$ and then compares them element-wise to $\beta$.

generateTuples[beta_, d_] := Module[{lst = PadRight[beta, d], candidates}, candidates = Flatten[FrobeniusSolve[Range[d], #] & /@ Range[d], 1]; TakeWhile[#, # > 0 &] & /@ Select[candidates, And @@ Thread[lst <= #] &] ] 

So:

generateTuples[{1}, 3] (* {{1}, {2}, {1, 1}, {3}} *) 

$^1$ I'm not entirey sure that I'm capturing all the possibilities or that I'm understanding the OP's requirement. The OP should check my assumptions and test this with lots of example lists.

march
  • 24.9k
  • 2
  • 48
  • 108