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)的主要内容,如果未能解决你的问题,请参考以下文章