nyoj 1282 部分和问题

部分和问题(入门题)

时间限制:1000 ms  |  内存限制:65535 KB
难度:0
 
描述

给你n个数(a1,a2,a3.......an) ,是否存在某一些数字加起来等于k,有就输出 "YES",否则输出 "NO"。

数据范围:n<20;

a1+a2+....an在int范围里面.

 
输入
多组输入
每组第一行输入两个数n,k
第二行输入n个数a1 a2 ...... an
输出
如果存在一些数加起来为k输出"YES";否则输出"NO".
样例输入
5 6
2 3 5 2 1
3 6
2 3 9
样例输出
YES
NO
 1 #include <cstdio>
 2 #include <cstdlib>
 3 
 4 int n,k;
 5 int a[30];
 6 
 7 bool dfs(int t, int sum) {
 8     if(t == n) {
 9         return sum == k;
10     }
11     else {
12         if(dfs(t+1, sum)) {
13             return true;
14         }
15         else {
16             return dfs(t+1,sum+a[t]);
17         }
18     }
19 }
20 int main(int argc, char const *argv[])
21 {
22     while(scanf("%d",&n) != EOF) {
23         scanf("%d",&k);
24         for(int i =0; i < n; i++) {
25             scanf("%d",&a[i]);
26         }
27         
28         if(dfs(0,0)) {
29             puts("YES");
30         }
31         else {
32             puts("NO");
33         }
34     }
35     return 0;
36 }
原文地址:https://www.cnblogs.com/jasonJie/p/6084003.html