>>235
そういうアルゴリズムがあるのかは知らないが、例えば再起関数とかでできる
#include <iostream>
#include <vector>

using Vector = std::vector<int>;

void Func(size_t a, size_t m, size_t movingTarget, size_t start, Vector* pbuff, std::vector<Vector>* pdest)
{
if(movingTarget != a){
for(size_t i = start; i < m; ++i){
(*pbuff)[i] += 1;
Func(a, m, movingTarget+1, i, pbuff, pdest);
(*pbuff)[i] -= 1;
}
} else {
pdest->push_back(*pbuff);
return;
}
}

int main() {
size_t a, m;
std::cin >> a >> m;
Vector buff(m, 0);
std::vector<Vector> dest;
Func(a, m, 0, 0, &buff, &dest);
return 0;
}