题目链接:点击打开链接
题目大意:略。
解题思路:二叉树LDR遍历思想。
AC 代码
using namespace std;
typedef long long ll;
const int maxn = 30;
int a[maxn],b[maxn];
int n,t,len,rs;
void dfs(int cnt,int sum)
{
// for(int i=len-1;i>=0;i--)
// {
// printf("%d ",b[i]);
// }
// puts("");
if(cnt==0)
{
if(len!=0 && sum==t)
{
for(int i=len-1;i>=0;i--)
{
printf("%d ",b[i]);
}
puts("");
rs++;
}
return;
}
dfs(cnt-1,sum); // 二叉树LDR遍历思想
b[len++]=a[cnt-1];
dfs(cnt-1,sum+a[cnt-1]);
len--;
}
int main()
{
while(~scanf("%d",&n)) // TLE --> 去掉while
{
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
scanf("%d",&t);
rs=len=0;
dfs(n,0);
printf("%d\n",rs);
}
return 0;
}