Description
从重量分别为w[1]……w[n]物品之中选择若干件,装入能装s重的背包,是否正好装满?
Input
背包容量s 物品总件数n
w[0]
……
w[n-1]
Output
Have Solution(单词第一字母大写,单词之间空一格)
被选中装入背包的物品重量(按初始值顺序输出,每个数占5个字符位,靠左)
或:
No Solution(并换行回车)
Sample Input
12 5 2 5 6 7 13
Sample Output
Have Solution 5 7 (并换行回车)
递归相关的,看来递归是一门硬课程,看了别人的程序后模仿的
程序:
#include<iostream>
using namespace std;
int *w,*a;
int n,k;
bool bag(int s,int i)
{
if(s==0) return true;
else if(s<0||(s>0&&i>n)) return false;
else if(bag(s-w[i],i+1))
{
a[k++]=w[i];
return true;
}
else return bag(s,i+1);
}int main()
{
int i,s;
scanf("%d%d",&s,&n);
w=new int[n];a=new int[n];
for(i=1;i<=n;i++)
scanf("%d",&w[i]);
int t=bag(s,1);
if(t)
{
printf("Have Solution/n");
for(i=k-1;i>=0;i--)
printf("%-5d",a[i]);
printf("/n");
}
else printf("No Solution/n");
return 0;
}