和 (DFS)

Time Limit:1000MSMemory Limit:65536KB
Total Submissions:177Accepted:93
Share
Description:
 
      现给定一个含有n个元素的数组A,要求:从这n个数中选择一些数,这些数的和恰好为k
 
Input:
 
多组测试数据。第一行为n(1<=n<=20) 第二行为n个整数,每个数的范围为(-10^8≤A[i]≤10^8) 第三行为整数k(-10^8≤k≤10^8).
 
Output:
 
如果能够达到目的,输出”Of course,I can!”; 否则输出”Sorry,I can’t!”.
 
Sample Input:
 
4 1 2 4 7 13 4 1 2 4 7 15
 

Sample Output:
 
Of course,I can! Sorry,I can't!
 
 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio> 
 4 using namespace std;
 5 int a[25];
 6 int vis[250];
 7 int n,m,flag;
 8 void dfs(int i,int sum)
 9 {
10     if(i<n&&!vis[i]){
11         vis[i]=1;
12         if(sum+a[i]==m){
13             flag=1;
14         }else if(sum+a[i]<m){
15             dfs(i+1,sum+a[i]);
16             dfs(i+1,sum);
17         }else{
18             dfs(i+1,sum);
19         }
20         vis[i]=0;
21     }
22 }
23 int main() {
24     while(cin>>n){
25         for(int i=0;i<n;i++) cin>>a[i];
26         cin>>m;
27         flag=0;
28         dfs(0,0);
29         if(flag) cout<<"Of course,I can!"<<endl;
30         else cout<<"Sorry,I can't!"<<endl;
31     }
32     return 0;
33 }

 

转载于:https://www.cnblogs.com/shixinzei/p/10561454.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值