#include <iostream>
using namespace std;
int length;
void PrintSolution(int *flag)
{
for (int i=0;i<length;i++)
{
if (flag[i]==1)
{
cout<<i+1<<" ";
}
}
cout<<endl;
}
void BagProblem(int m,int n, int *flag)
{
if (n<1||m<1)
return;
if (m<n)
n=m;
if (n==m)
{
flag[n-1]=1;
PrintSolution(flag);
flag[n-1]=0;
}
flag[n-1]=1;
BagProblem(m-n,n-1,flag);
flag[n-1]=0;
BagProblem(m,n-1,flag);
}
int main()
{
int m,n;
cout<<"please input m and n:"<<endl;
cin>>m>>n;
cout<<"the solution is :"<<endl;
length=n;
int *flag=(int *)malloc(sizeof(int)*n);
memset(flag,0,sizeof(int)*n);//注意memset用法及区分sizeof(flag)/sizeof(int)*n
BagProblem(m,n,flag);
free(flag);
return 0;
}