首页 > 其他 > 详细

部分和问题(简单版)

时间:2018-04-06 15:05:35      阅读:193      评论:0      收藏:0      [点我收藏+]

正式开始学习dfs的用法,突然发现以前不能做的问题原来是深度优先问题;

练手题很简单,大概意思就是在就是一系列数中是否能找出几个数相加,使结果等于一个给定的数

 1 #include<iostream>
 2 #include<string>
 3 using namespace std;
 4 int a[100] = { 1,2,4,7 }, n = 4, k=11;
 5 bool dfs(int i, int sum)
 6 {
 7     if (i == n) return sum == k;
 8     if (dfs(i + 1, sum)) return true;
 9     if (dfs(i + 1, sum+a[i])) return true;
10     return false;
11 }
12 void solve()
13 {
14     if (dfs(0, 0)) cout << "Yes" << endl;
15     else cout << "No" << endl;
16 }
17 int main()
18 {
19     solve();
20     return 0;
21 }

循环结束的条件是i==n,即前n项都计算完成后,判断是否等于sum,

改良升级版(规定几个数相加,使的结果等于给定的一个数)

 1 #include<iostream>
 2 #include<string>
 3 using namespace std;
 4 int a[100] = { 1,2,4,7 }, n = 4, k=11;
 5 bool dfs(int i, int sum,int mark)
 6 {
 7     if (i == n&&mark==2) return sum == k;
 8     if (i == n && mark != 2) return false;
 9     if (dfs(i + 1, sum,mark)) return true;
10     if (dfs(i + 1, sum+a[i],mark+1)) return true;
11     return false;
12 }
13 void solve()
14 {
15     if (dfs(0, 0,0)) cout << "Yes" << endl;
16     else cout << "No" << endl;
17 }
18 int main()
19 {
20     solve();
21     return 0;
22 }

 

部分和问题(简单版)

原文:https://www.cnblogs.com/kangdong/p/8727542.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!