博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
dfs枚举
阅读量:4983 次
发布时间:2019-06-12

本文共 901 字,大约阅读时间需要 3 分钟。

深度优先搜索(DFS,Depth-First Search)是搜索手段之一。它从某个状态开始,不断的转移状态知道无法转移,然后退回到前一步的状态,继续转移到其他状态,如此不断重复,直到找到最终的解。

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

 1<=n<=20

-1e8<=ai<=10e8

-1e8<=k<=1e8

输入:

 n=4 k=13

a={1 2 4 7}

输出:

Yes (13 = 2 + 4 + 7)

输入:

n=4 k=15

a={1 2 4 7}

输出:

No

枚举每一种情况复杂度为O(2^n)。利用dfs搜索可以枚举每一种情况代码如下:

#include 
#include
#include
#include
#include
#include
using namespace std;#define pi acos(-1)const int N=1e5;int n,a[N],ans[N],k;int h=0;bool dfs(int i,int sum)//i代表第i个数(从0开始){ if(i==n) return sum==k; if(dfs(i+1,sum+a[i])) //加入a[i]往下递归 { ans[h++]=a[i]; return true; } if(dfs(i+1,sum))//不加a[i]往下递归  可以看成是加不加a[i]的问题(包括了所有状态) { return true; } return false;}int main(){ int i,j; while(scanf("%d%d",&n,&k)!=EOF) { h=0; for(i=0; i

  

转载于:https://www.cnblogs.com/yuanbo123/p/6048399.html

你可能感兴趣的文章
Latest Common Ancestor
查看>>
getByClass--获取指定标签且class为指定的所有元素
查看>>
三点顺序
查看>>
拟物化设计与扁平化设计
查看>>
PS小实验-去除水印
查看>>
IS-IS完整笔记
查看>>
★如何解释特修斯之船问题?
查看>>
玩转PS路径,轻松画logo!
查看>>
Python简介及学习
查看>>
!!!后续博客写到简书 + 博客园留博客目录
查看>>
小白学数据分析-----> 利用SPSS对DAU/MAU进行比率分析
查看>>
js中this与srcElement的区别
查看>>
第一个MyBatis程序
查看>>
.net 数据库缓存依赖:【实例与解释】
查看>>
Android Service小试 启动和停止service
查看>>
一天一个设计模式:适配器模式
查看>>
第5题 查找字符串中的最长回文字符串---Manacher算法
查看>>
HDOJ 1069 Monkey and Banana 解题报告
查看>>
11锚点与图像对象
查看>>
Ios中比较两个日期之间的时间差距
查看>>