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

4959: 部分和问题

时间:2019-05-13 20:15:56      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:tar   read   ...   for   family   dfs   namespace   i++   panel   

描述

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

输入

输入数据有多组,每组第一行为两个整数n和k,n表示数的个数,k表示数的和。
第二行为n个数。

1<=n<=20,-10^8<=ai, k<=10^8

输出

如果和恰好可以为k,输出“Yes”,否则“No”

样例输入

样例输出

解题思路:dfs

技术图片
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 ll arr[25],sum=0;
 5 ll n,k,flag;
 6 
 7 bool cmp(int a,int b){
 8     return a<b;
 9 }
10 
11 void dfs(int rankk){
12     if(sum>k) return;
13     else if(sum==k) {flag=1;return;}
14     for(int i=rankk;i<=n;i++){
15         sum+=arr[i];
16         dfs(i+1);
17         sum-=arr[i];
18     }
19 }
20 
21 int main()
22 {
23     ios::sync_with_stdio(false);
24     while(cin>>n>>k){
25         for(int i=1;i<=n;i++){
26             cin>>arr[i];
27         }
28         sort(arr+1,arr+1+n,cmp);
29         for(int i=1;i<=n;i++){
30             sum=0;flag=0;
31             dfs(i);
32             if(flag==1) break;
33         }
34         if(flag==1) cout << "Yes" << endl;
35         else cout << "No" << endl;
36     }
37     return 0;
38 }
View Code

 

 

4959: 部分和问题

标签:tar   read   ...   for   family   dfs   namespace   i++   panel   

原文地址:https://www.cnblogs.com/qq-1585047819/p/10858670.html

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