Code:
#include<bits/stdc++.h>
using namespace std;
const int N = 15;
int n, k, maxn, s[N], ans[N];
bool dfs2(int l, int sum, int mb)
{
if(l > n || sum > mb)
{
return 0;
}
if(sum == mb)
{
return 1;
}
for(int i = 0; i < N; i++)
{
if(s[i])
{
if(dfs2(l + 1, sum + i + 1, mb))
{
return 1;
}
}
}
return 0;
}
int check()
{
for(int i = 1; ; i++)
{
if(!dfs2(0, 0, i))
{
return i - 1;
}
}
}
void dfs(int l, int last)
{
if(l == k)
{
int tmp = check();
if(tmp > maxn)
{
maxn = tmp;
for(int i = 0; i < N; i++)
{
ans[i] = s[i];
}
}
return;
}
for(int i = last; i < N; i++)
{
s[i] = 1;
dfs(l + 1, i + 1);
s[i] = 0;
}
return;
}
int main()
{
cin >> n >> k;
dfs(0, 0);
for(int i = 0; i < N; i++)
{
if(ans[i])
{
cout << i + 1 << " ";
}
}
cout << "\nMAX=" << maxn;
return 0;
}