题目源地址:http://ac.jobdu.com/problem.php?pid=1114
C++代码:
#include<stdio.h>
int buf[21];
int ans;
bool mark[21];
int n;
void dfs(int i,int sum)
{
if(sum==0)
{
ans++;
return ;
}
if(i>=n||sum>40)
return;
if(mark[i]==false)
{
mark[i]=true;
dfs(i+1,sum-buf[i]);
mark[i]=false;
dfs(i+1,sum);
}
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
for(int i=0;i<n;i++)
scanf("%d",&buf[i]);
for(int i=0;i<21;i++)
mark[i]=false;
ans=0;
dfs(0,40);
printf("%d\n",ans);
}
return 0;
}