51nod1268(基础dfs)

解题思路:直接搜索找就行了,搜两边,一个是加入这个数字,一边是不加入这个数字

代码:

#include<iostream>
#include<algorithm>
#define maxn 30
using namespace std;
int a[maxn];
int k;
int n;
int flag;
void dfs(int i,int sum,int step)
{
    if(step>n)
        return;
    else
    {
        if(sum==a[i])
        {
            flag=1;
            return;
        }
        if(sum>a[i])
            dfs(i+1,sum-a[i],step+1);
            dfs(i+1,sum,step+1);
    }
}
int main()
{
    while(cin>>n>>k)
    {
        for(int i=1;i<=n;i++)
            cin>>a[i];
        dfs(1,k,1);
        if(flag==1)
            cout<<"Yes ";
        else
            cout<<"No ";
    }
    return 0;
}

原文地址:https://www.cnblogs.com/huangdao/p/7800112.html