蓝桥杯 - 和为T

题目链接:点击打开链接


题目大意:


解题思路:二叉树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;
}

猜你喜欢

转载自blog.csdn.net/dream_weave/article/details/80357342