码迷,mamicode.com
首页 > 其他好文 > 详细

部分和问题

时间:2020-01-15 14:21:24      阅读:75      评论:0      收藏:0      [点我收藏+]

标签:style   name   bsp   main   个数   for   ++   条件   str   

题目描述:

给定整数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 } 

部分和问题

标签:style   name   bsp   main   个数   for   ++   条件   str   

原文地址:https://www.cnblogs.com/Si-wuxie/p/12195907.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!