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 }