51nod1268 和为K的组合(DFS)

Posted spongeb0b

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 }

 

以上是关于51nod1268 和为K的组合(DFS)的主要内容,如果未能解决你的问题,请参考以下文章

51nod 1268

51nod1268

51Nod - 1094 和为k的连续区间

51nod 1094STL和为k的连续区间

51Nod2522 和为K的倍数

51Nod 1094 和为k的连续区间 | 水