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 (并换行回车)
KEY:用的是递归的办法;
Source:
#include < iostream >
using namespace std;
int k;
int w[ 100 ];
int a[ 100 ];
int bag( int s, int n)
... {
if(s==0) return 1;
if(s<0||s>0&&n<1) return 0;
if(bag(s-w[n],n-1)==1)
...{
a[k++]=w[n];
return 1;
}
else return bag(s,n-1);
}
int main()
... {
// freopen("fjnu_1745.in","r",stdin);
int s,n;
int i;
cin>>s>>n;
for(i=1;i<=n;i++)
cin>>w[i];
int t=bag(s,n);
if(t==1)
...{
cout<<"Have Solution"<<endl;
for(i=0;i<k;i++)
...{
printf("%-5d",a[i]);
}
cout<<endl;
}
else cout<<"No Solution"<<endl;
return 0;
}
#include < iostream >
using namespace std;
int k;
int w[ 100 ];
int a[ 100 ];
int bag( int s, int n)
... {
if(s==0) return 1;
if(s<0||s>0&&n<1) return 0;
if(bag(s-w[n],n-1)==1)
...{
a[k++]=w[n];
return 1;
}
else return bag(s,n-1);
}
int main()
... {
// freopen("fjnu_1745.in","r",stdin);
int s,n;
int i;
cin>>s>>n;
for(i=1;i<=n;i++)
cin>>w[i];
int t=bag(s,n);
if(t==1)
...{
cout<<"Have Solution"<<endl;
for(i=0;i<k;i++)
...{
printf("%-5d",a[i]);
}
cout<<endl;
}
else cout<<"No Solution"<<endl;
return 0;
}