01背包问题
#include<iostream.h>
#include<malloc.h>
int length;
void PrintSolutions(int *flag)
{
for (int i=1; i<=length; i++)
{
if (flag[i] == 1)
{
cout << i << " ";
}
}
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;
PrintSolutions(flag);
flag[n] = 0;
}
flag[n] = 1;
BagProblem(m-n,n-1,flag);
flag[n] = 0;
BagProblem(m,n-1,flag);
}
void main()
{
int n=10,m=12;
length=n;
int *flag = (int *)malloc(sizeof(int)*(n+1));
BagProblem(m,n,flag);
free(flag);
}