dfs枚举
深度优先搜索(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 <iostream>
#include<stack>
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include <math.h>
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<n; i++)
scanf("%d",&a[i]);
if(dfs(0,0))
{
printf("Yes (%d =",k);
for(i=0; i<h; i++)
{
printf(" %d",ans[i]);
if(i!=h-1)
printf(" +");
}
printf(")\n");
}
else
printf("No\n");
}
return 0;
}
dfs枚举的更多相关文章
- POJ1288 Sly Number(高斯消元 dfs枚举)
由于解集只为{0, 1, 2}故消元后需dfs枚举求解 #include<cstdio> #include<iostream> #include<cstdlib> ...
- POJ 2429 GCD & LCM Inverse (Pollard rho整数分解+dfs枚举)
题意:给出a和b的gcd和lcm,让你求a和b.按升序输出a和b.若有多组满足条件的a和b,那么输出a+b最小的.思路:lcm=a*b/gcd lcm/gcd=a/gcd*b/gcd 可知a/gc ...
- POJ 1270 Following Orders (拓扑排序,dfs枚举)
题意:每组数据给出两行,第一行给出变量,第二行给出约束关系,每个约束包含两个变量x,y,表示x<y. 要求:当x<y时,x排在y前面.让你输出所有满足该约束的有序集. 思路:用拓扑排 ...
- HDU 2489 Minimal Ratio Tree(dfs枚举+最小生成树)
想到枚举m个点,然后求最小生成树,ratio即为最小生成树的边权/总的点权.但是怎么枚举这m个点,实在不会.网上查了一下大牛们的解法,用dfs枚举,没想到dfs还有这么个作用. 参考链接:http:/ ...
- poj 1753 Flip Game(bfs状态压缩 或 dfs枚举)
Description Flip game squares. One side of each piece is white and the other one is black and each p ...
- POJ 1753 Flip Game (DFS + 枚举)
题目:http://poj.org/problem?id=1753 这个题在開始接触的训练计划的时候做过,当时用的是DFS遍历,其机制就是把每一个棋子翻一遍.然后顺利的过了.所以也就没有深究. 省赛前 ...
- HDU1045 Fire Net(DFS枚举||二分图匹配) 2016-07-24 13:23 99人阅读 评论(0) 收藏
Fire Net Problem Description Suppose that we have a square city with straight streets. A map of a ci ...
- poj 2965 The Pilots Brothers' refrigerator(dfs 枚举 +打印路径)
链接:poj 2965 题意:给定一个4*4矩阵状态,代表门的16个把手.'+'代表关,'-'代表开.当16个把手都为开(即'-')时.门才干打开,问至少要几步门才干打开 改变状态规则:选定16个把手 ...
- The Pilots Brothers' refrigerator DFS+枚举
Description The game “The Pilots Brothers: following the stripy elephant” has a quest where a player ...
- POJ 1753 Flip Game DFS枚举
看题传送门:http://poj.org/problem?id=1753 DFS枚举的应用. 基本上是参考大神的.... 学习学习.. #include<cstdio> #include& ...
随机推荐
- day21 os random 序列json
一.random模块 import random # print(random.random()) #0到1之间数 # print(random.uniform(10,20)) #范围内小数 ...
- 在PC端或移动端应用中接入商业QQ
前两天在做一个项目XXX的时候,遇见一个问题,在页面中需要接入企业的QQ,在查找腾讯API后无果,则请求人工服务,然后人家给一网址(就是API接口),然后你只需要登录你的QQ,然后选择相应的显示类型, ...
- redis 底层数据结构 整数集合intset
整数集合是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合的元素数量不多时Redis就会使用整数集合作为集合键的底层实现 整数集合是Redis用于保存整数值的集合抽象数据结构,它可以保存 ...
- Eclipse: Android Device Chooser - Unknown Target
公司最近所有的项目都使用到了Android开发手机(或PDA)应用.所需要的Android开发技术并不是非常复杂,因为我们的底层方法全部使用WebServcie写好了,做Android开发的人员只需要 ...
- 【BZOJ1863】[Zjoi2006]trouble 皇帝的烦恼 二分+DP
[BZOJ1863][Zjoi2006]trouble 皇帝的烦恼 Description 经过多年的杀戮,秦皇终于统一了中国.为了抵御外来的侵略,他准备在国土边境安置n名将军.不幸的是这n名将军羽翼 ...
- 1503 猪和回文(DP)
1503 猪和回文 题目来源: CodeForces 基准时间限制:2 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 一只猪走进了一个森林.很凑巧的是,这个森林的形状是长方形的,有 ...
- Oracle备份一张表
数据库:myOnly 创建表:myTable 的备份表 myTable_tmpe create table myTable_tmpe as select * from myTable ; 补充: -- ...
- redis 集群安装 3主3从3台云主机
穷呀!! 3台云主机来搭建个集群! 配置低的伤心! 1u2G ! 不说了,干吧! 可以看出 OK了. 准备工作 :
- 学习 Unix 常用命令
第一个是 man 命令,作用是:"Display system documentation",我是 manual 的缩写.通过这个命令,我们能了解接下来要学习的命令的文档. ls, ...
- git学习------>git commit命令的默认编辑器的修改
今天在新同事的电脑上,用git commit命令帮新同事提交代码的时候,编辑完commit的信息后,居然不记得怎么退出了.蛋疼. 后来百度了一下,原来此时是进入GUN nano编辑器.在这里可以添加你 ...