题目链接:bailian.openjudge.cn/practice/2755/
我们来分析一下题目,从k种物品中选出几个,每种只能选出一个,看能有多少种填法能将背包填满。
我先说用递归的写法,
首先传给递归函数两个参数,一个是口袋的空间,一个是还有多少个物品可以选择。
从第k个开始选择,然后填入口袋。
但是第k-1个物品不想填该怎么操作?
下面贴出代码
#include<iostream>
using namespace std;
int a[30];
int n;
int ways(int w,int k){
if(w==0){
return 1;
}
if(k<=0){
return 0;
}
return ways(w,k-1)+ways(w-a[k],k-1);
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
cout<<ways(40,n);
return 0;
}