#include <algorithm> // Include the algorithm header for std::find
#include <iostream>
#include <map>
#include <vector>
std::map<std::pair<
int
,
int
>, std::vector<
int
> > memo;
std::vector<
int
> distinctOddIntegersSum(
int
N,
int
K)
{
if
(memo.count(std::make_pair(N, K)) > 0) {
return
memo[std::make_pair(N, K)];
}
if
(K == 1) {
if
(N % 2 != 0) {
return
{ N };
}
else
{
return
std::vector<
int
>();
}
}
else
{
for
(
int
i = 1; i < N; i += 2) {
std::vector<
int
> remaining
= distinctOddIntegersSum(N - i, K - 1);
if
(!remaining.empty()
&& std::find(remaining.begin(),
remaining.end(), i)
== remaining.end()) {
memo[std::make_pair(N, K)] = { i };
memo[std::make_pair(N, K)].insert(
memo[std::make_pair(N, K)].end(),
remaining.begin(), remaining.end());
return
memo[std::make_pair(N, K)];
}
}
}
memo[std::make_pair(N, K)] = std::vector<
int
>();
return
memo[std::make_pair(N, K)];
}
int
main()
{
int
N = 10;
int
K = 2;
std::vector<
int
> result = distinctOddIntegersSum(N, K);
if
(!result.empty()) {
for
(
int
i : result) {
std::cout << i <<
" "
;
}
}
else
{
std::cout << -1;
}
std::cout << std::endl;
return
0;
}