//背包问题[M, N]
#include<iostream>
using namespace std;
int M, N, solution;
int *pOut;
void Comput(int m, int n)
{
if( m < 1 || n < 1 || ( n == 1 && m != 1 ))
return;
//if remaining space = bag size
if( m==n )
{
pOut[n] = 1;
cout<<"Solution "<<++solution<<": ";
for ( int i = 1; i <= N; i++ )
{
if( pOut[i] )
cout<<i<<" ";
}
cout<<endl;
pOut[n] = 0;//reset bag status
}
Comput( m, n-1);//not use bag n
pOut[n] = 1; //mark current bag(used) = 1
Comput(m - n, n - 1);//use bag [n]
pOut[n] = 0;
}
void main()
{
printf("Input M(total weights), N(number of bags): ");
scanf("%d %d", &M, &N);
if( M < N )
N = M;
pOut = new int[N+1];
memset(pOut, 0, (N+1)*sizeof(int) );
Comput(M, N);
delete []pOut;
cout<<"Total solutions: "<<solution<<endl;
}
递归:背包问题[M, N]
最新推荐文章于 2018-11-01 21:48:08 发布