部分和

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <algorithm>
 4 #include <cmath>
 5 #include <cstring>
 6 
 7 using namespace std;
 8 int n,k,c,sum,s[201],vis[201],ok;    //sum和,s【】表示输入数据,vis【】表示是否用过。
 9 
10 void dfs(int c1,int sum1)
11 {
12     if(sum1==k)
13     {
14         ok=0;
15         printf("YES
");
16         for(int j=0;j<c1;j++)
17             if(vis[j])
18                 printf("%d ",s[j]);
19         printf("
");
20         
21     }
22     for(int i=c1;i<n;i++)
23     {
24         sum1+=s[i];
25         vis[i]=1;
26         dfs(i+1,sum1);
27         vis[i]=0;
28         sum1-=s[i];
29     }
30         
31 }
32         
33 
34 int main()
35 {
36     while(~scanf("%d%d",&n,&k))
37     {
38         c=0;
39         ok=1;
40         for(int i=0;i<n;i++)
41             scanf("%d",&s[i]);
42         memset(vis,0,sizeof(vis));
43         sum=0;
44         dfs(c,sum);
45         if(ok)
46             printf("NO
");
47     }
48     return 0;
49 }
View Code

从a1开始按顺序决定每个数加或者不加,在全部n个数都决定后判断是否和等于给定的值k即可。

原文地址:https://www.cnblogs.com/WDKER/p/5375669.html