一道比较基础的递归题,递归的回溯问题自己还需要理解,递归的算法O(2^n)好像也能过?大概是由于数据规模不够大吧。。
#include <iostream>
using namespace std;
int n;
int a[105];
int count = 0;
void search(int value,int x)
{
// printf("value = %d\tx=%d\n",value,x);
if(value==0)
{
count++;
return ;
}
if(x>=n) return ;
if(value<0) return ;
search(value,x+1);//不取这件物品
search(value-a[x],x+1);//取这件物品 递归的回溯问题? 基本的递归
}
int main(void)
{
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
search(40,0);
printf("%d\n",count);
}