部分和问题

Posted si-wuxie

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了部分和问题相关的知识,希望对你有一定的参考价值。

题目描述:

给定整数a1,a2....an,判断是否可以从中选出若干数,使它们的和恰好为k.

限制条件

1≤n≤20

-10^8 ≤ ai ≤ 10^8

 

-10^8 ≤ k ≤ 10^8

样例1

输入:

n=4

a={1,2,4,7}

k=13

输出

Yes

样例2

输入:

n=4

a={1,2,4,7}

k=15

输出

No

分析:从a1开始按顺序决定每个数加或不加,在全部n个数都决定后再判断它们的和是不是k即可。

代码如下:

 1 #include<iostream>
 2 using namespace std;
 3 
 4 #define MAX_N 20
 5 int a[MAX_N];
 6 int n,k;
 7 
 8 bool dfs(int i,int sum)//已经从前i项得到了和sum,然后对于i项之后的进行判断 
 9 {
10     if(i==n)//如果前i项都计算过了,则返回sum是否与k相等 
11     {
12         return sum==k;
13     }
14     if(dfs(i+1,sum))//不加上a[i]的情况 
15     {
16         return true;
17     }
18     if(dfs(i+1,sum+a[i])) //加上a[i]的情况 
19     {
20         return true;
21     }
22     return false;
23 }
24 int main(){
25     
26     cin>>n;
27     for(int i=0; i<n; i++)
28     {
29         cin>>a[i];
30     }
31     cin>>k;
32     if(dfs(0,0))
33     {
34         cout<<"Yes";
35     }
36     else
37     {
38         cout<<"No";
39     }
40     return 0;
41 } 

以上是关于部分和问题的主要内容,如果未能解决你的问题,请参考以下文章

Wordpress - 将代码片段包含到布局的选定部分的插件

AJAX相关JS代码片段和部分浏览器模型

为啥此代码片段返回意外结果?

部分代码片段

引用向量的部分片段?

VS2015使用技巧 打开代码片段C#部分