51nod1268 和为K的组合(DFS)

基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题
 收藏
 关注
给出N个正整数组成的数组A,求能否从中选出若干个,使他们的和为K。如果可以,输出:"Yes",否则输出"No"。
Input
第1行:2个数N, K, N为数组的长度, K为需要判断的和(2 <= N <= 20,1 <= K <= 10^9)
第2 - N + 1行:每行1个数,对应数组的元素A[i] (1 <= A[i] <= 10^6)
Output
如果可以,输出:"Yes",否则输出"No"。
Input示例
5 13
2
4
6
8
10
Output示例
No
李陶冶 (题目提供者)
 
 数据比较水,直接dfs
 1 #include<iostream>
 2 using namespace std;
 3 long long int n,a[21],m;
 4 int flag=0,v[21]={0};
 5 void dfs(long long int sum,int t)
 6 {
 7     //cout<<sum<<endl;
 8     if(sum==m)
 9     {
10         flag=1;
11         return;
12     }
13     if(flag||sum>m||t>n)
14     return;
15     dfs(sum+a[t],t+1);
16     dfs(sum,t+1);
17 }
18 int main()
19 {
20     scanf("%lld%lld",&n,&m);
21     long long int sum=0;
22     for(int i=1;i<=n;i++)
23     {
24         scanf("%lld",&a[i]);
25         sum+=a[i];
26     }
27     if(sum<m)
28     printf("No
");
29     else if(sum==m)
30     printf("Yes
");
31     else
32     {
33         flag=0;
34         dfs(0,1);
35         if(flag)
36         printf("Yes
");
37         else
38         printf("No
");
39     }
40     return 0;
41 }
原文地址:https://www.cnblogs.com/spongeb0b/p/9345863.html