《挑战程序设计》书上的DFS题;
从a1开始按顺序决定每个数加或者是不加,紧接着判断就好啦;
#include <bits/stdc++.h>
#define N 10010
using namespace std ;
int n , k ;
int a[N];
bool dfs(int i, int sum )
{
if(i==n) return sum==n; //*sum==n是判断,如果真true,否则false*//
if(dfs(i+1,sum)) return true ;
if(dfs(i+1,sum+a[i])) return true ;
else return false ; //*都不符合则返回false*//
}
int main()
{
cin>>n;
for(int i = 0 ; i < n ; i++)
{
cin>>a[i];
}
cin>>k;
if(dfs(0,0)) //*从 i= 0 , sum=0 开始搜索*//
printf("YES\n");
else printf("NO\n");
return 0 ;
}