oj2755 神奇的口袋

 1 #include<stdio.h>

 2 int n,a[20];

 3 int cnt(int i,int sum)

 4 {

 5     if(!sum) return 1;//如果sum等于0,说明前面已经找到一种成功的组合方式,返回1,

 6     if(i==n||sum<0) return 0;//i==n,说明找遍了数组a,但没找到符合的,返回0,如果sum<0,此路径不符合,返回0。

 7     return cnt(i+1,sum-a[i])+cnt(i+1,sum);

 8 }

 9 int main()

10 {

11     scanf("%d",&n);

12     for(int i=0;i<n;++i)

13         scanf("%d",&a[i]);

14     printf("%d",cnt(0,40));

15     return 0;

16 }

你可能感兴趣的:(OJ)