/*************************************
有一背包能放总重物S,设有N件物品,
重量分别为W1,W2.。。。
希望从这N件物品里选出若干件,
恰好能放到背包里,即所选物品和为S.
此程序能求出其中一组解。
***************************************/
#include <stdio.h>
#define N 7
#define S 15
int w[N+1] = {0, 1, 4, 3, 4, 5, 2, 7};
int knap(int s, int n)
{
if(s==0) return 1;
if(s<0 ||(s>0 && n<1)) return 0;
if(knap(s-w[n],n-1))
{
printf("%4d",w[n] );
return 1;
}return knap(s,n-1);
}
main()
{
if( knap(S, N)) printf("ok!\n" );
else printf("N0!\n");
}