题目大意:略。
解题思路:二叉树LDR遍历思想。
AC 代码
#include<bits/stdc++.h> #include<cmath> #define mem(a,b) memset(a,b,sizeof a); 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; }