给定 nn 个整数,判断是否能选出若干个数,使得它们的和恰好为 kk。
输入
- 多组测试数据,以
EOF
结束 - 每组测试数据由以下部分组成:
- 第一行为整数 n(1 \leq n \leq 20)n(1≤n≤20)
- 第二行为 nn 个整数 a_i(-10^8 \leq a_i \leq 10^8)ai(−108≤ai≤108)
- 第三行为整数 k(-10^8 \leq k \leq 10^8)k(−108≤k≤108)
- 数据保证多组测试数据的 nn 之和不超过 2020
输出
- 每组测试输出一行,
Yes
表示能成功,No
表示失败
样例 1
输入
4 1 2 4 7 13 4 1 2 4 7 15
输出
Yes No
#include<bits/stdc++.h>
using namespace std;
int n,a[100],k;
bool dfs(int i,int sum)
{
if(i==n) return sum==k;
if(dfs(i+1,sum)) return true;
if(dfs(i+1,sum+a[i])) return true;
return false;
}
int main()
{
while(cin>>n)
{
for(int i=0;i<n;i++)
cin>>a[i];
cin>>k;
if(dfs(0,0)) puts("Yes");
else puts("No");
}
}