(1<=n<=20,保證不超int范圍)
下一行輸入k,表示數的和
4 1 2 4 7
13
YES
簡單的dfs
#include
using namespace std;
#define MAX_N 30
int a[MAX_N];
int n,k;
bool dfs(int i,int sum)//已經從前i項得到了和sum,然後對於 i 項之後的進行分支
{
if(i==n)return sum==k;//如果前n項都計算過了,則返回sum是否與k相等
if(dfs(i+1,sum))return true;//不加a[i]
if(dfs(i+1,sum+a[i]))return true;//加a[i]
return false;//是否加上a[i]都不能湊成k
}
int main()
{
cin>>n;
for(int i=0;i
cin>>a[i];
}
cin>>k;
if(dfs(0,0))
cout<<"YES"<
cout<<"NO"<
}