给出N个正整数组成的数组A,求能否从中选出若干个,使他们的和为K。如果可以,输出:"Yes",否则输出"No"。
收起
输入
第1行:2个数N, K, N为数组的长度, K为需要判断的和(2 <= N <= 20,1 <= K <= 10^9) 第2 - N + 1行:每行1个数,对应数组的元素A[i] (1 <= A[i] <= 10^6)
输出
如果可以,输出:"Yes",否则输出"No"。
输入样例
5 13 2 4 6 8 10
输出样例
No
暴力深搜,无脑流写法,但是竟然过了,,,,,
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<set>
#include<stack>
#include<queue>
#include<string>
#include<iostream>
#include<vector>
using namespace std;
int n,k,s[1010101];
bool dfs(int i,int sum)
{
if(i==n)
return sum==k;
if(dfs(i+1,sum))
return 1;
if(dfs(i+1,sum+s[i]))
return 1;
return 0;
}
int main()
{
scanf("%d%d",&n,&k);
for(int i=0; i<n; i++)
scanf("%d",&s[i]);
if(dfs(0,0)) printf("YES\n");
else printf("NO\n");
return 0;
}