Sticks

题目传送门。
题目大意是,给你一个数字n代表总共的棍子数量,要做的就是,把这几根棍子拼成长度相同的棍子,并且让所拼成的棍子的长度尽可能地小,也就是拼成的棍子的数量尽可能的多。

在这里很简单的想到要给棍子排一下序,这样可以更简单找到合适棍子的。
-------------------下面的代码除去注释就是我自己写的代码。----------------------

#include<iostream>
#include<cstring>
#include<algorithm>
const int maxn=70;
int a[maxn],visit[maxn];
int n,total,target;
using namespace std;
bool dfs(int sum,int len,int pos) {if(sum==total) return true;if(len==target)   return dfs(sum+1,0,0);for(int i=pos;i<n;i++) {if(!visit[i]&&len+a[i]<=target) {visit[i]=1;if(dfs(sum,len+a[i],i+1))  return true;visit[i]=0;
//          if(len==0)    return false;
//          while(i+1<n&&a[i+1]==a[i])   i++;}}return false;
}
int main()
{freopen("D:\\MY\\ce.txt","r",stdin);while(cin>>n&&n) {int sum=0,ans=0;memset(a,0,sizeof(a));memset(visit,0,sizeof(visit));for(int i=0;i<n;i++) {cin>>a[i];sum+=a[i];}sort(a,a+n,greater<int>());for(int i=a[0];i<=sum;i++) {if(sum%i==0) {total=sum/i;target=i;if(dfs(0,0,0)) {ans=i;break;}}}cout<<ans<<endl;}return 0;
}

这段注释就是这个代码的灵魂所在,
没有这一段能在样例中跑出超时,
但是有这一段代码轻轻松松就跑完了所有样例。
但是这个代码的精髓就是:
第一步if剪枝:
会进入当len==0的时候这里就代表着,有一根棍子找了一圈发现找不到满足条件的,然后回到main函数里的for循环,尝试下一个target。
第二步while剪枝:
单现在查找的target有可能时正确答案时,对len不为0的情况,就是当前尝试的棍子不符合条件,所以当前长度的棍子可以不用再试了,换别的棍子继续尝试。

Sticks-hdu-1455深度搜索dfs相关推荐

  1. 深度搜索(DFS),一种用于遍历和搜索的算法

    先上百度对深度搜索的定义: 如果上边的定义没有理解,那么可以这样认为:深度搜索就是一种试探性的算法,例如你在一个十字路口想要去到某地,但是你又不认识具体的路(并且你不善言辞,万事不求人),那么你只能先 ...

  2. 【算法】深度搜索(DFS) 和 广度搜索(BFS)

    深度搜索(DFS) 点:然后退回到该顶点,搜索其它路径,直到以该顶点为始点的所有路径的顶点都被访问,深度搜索算法是递归算法,因为对于没一个节点来说,执行的是同样的操作.  简单来说,深度搜素算法就是一 ...

  3. 深度搜索(DFS)和广度搜索(BFS)

    深度搜索(DFS) 一.搜索方法:  沿出发顶点的第一条路径尽量深入,遍历路径上所有顶点:然后退回到该顶点,搜索其它路径,直到以该顶点为始点的所有路径的顶点都被访问,深度搜索算法是递归算法,因为对于没 ...

  4. DFS(深度搜索)无向图遍历(JAVA手把手深入解析)

    DFS(深度搜索)无向图遍历(JAVA手把手深入解析) 目录 DFS(深度搜索)无向图遍历(JAVA手把手深入解析) 前言 DFS深度优先 无向图 DFS全局变量定义 1.节点 2.节点数 3.根据图 ...

  5. 搜索算法——深度搜索

    前言:对于同一道题目,深度搜索和广度搜索有时都能用,深度搜索也与回溯有无法分割的联系,所以是有一些题目会有交叉,我这里只是一个大致的分类.学习资源:力扣.代码随想录.<LeetCode 101 ...

  6. 【人工智能】八数码问题:广度搜索、深度搜索

    应用广度搜索BFS和深度搜索DFS解决八数码问题,广度搜索和深度搜索都是盲目搜索,相关理论知识,算法过程:问题求解:状态空间图和盲目搜索. 参考:7种方法求解八数码问题 Python实现A*算法解决N ...

  7. 深度搜索 java_java实现的深度搜索与广度搜索算法BFS,DFS以及几种最短路径算法...

    java实现的深度搜索与广度搜索算法BFS,DFS以及几种最短路径算法 public class City { String name; int id; static int idCounter = ...

  8. 最基础的深度优化搜索(dfs)题目

    最基础的深度优化搜索(dfs)题目 前几天回看自己大一刚开学刷oj时遇到的一道循环类题目,结合这个假期自已学的一点点算法知识,重新写了段代码,也算是加深自己对dfs的理解了. 题目描述 将1,2,⋯, ...

  9. matlab bfs函数,matlab练习程序(广度优先搜索BFS、深度优先搜索DFS)

    如此经典的算法竟一直没有单独的实现过,真是遗憾啊. 广度优先搜索在过去实现的二值图像连通区域标记和prim最小生成树算法时已经无意识的用到了,深度优先搜索倒是没用过. 这次单独的将两个算法实现出来,因 ...

最新文章

  1. 代码结构中 Dao,Service,Controller,Util,Model 是什么意思,为什么划分?
  2. Qt5开发及实例学习之标准颜色对话框类QColorDialog:选择某种颜色
  3. Errors running builder 'JavaScript Validator' on project
  4. python扫描内网banner信息
  5. 购物车完善版,客户余额及所购商品保存在文件
  6. 新疆出差——特色美食大合集
  7. stringutils 用哪个包 apache spring_spring整合mq、jsonp跨越、httpclient工具的使用
  8. ORA-65096: 公用用户名或角色名无效引发的思考
  9. mysql as不能用吗,MySQL SUM不能与AS一起工作
  10. onInterceptTouchEvent / onTouchEvent响应事件的详析
  11. mongodb java 不等于_mongoDB在java上面的应用
  12. ../bin/testCurveFitting 出现的错误以及解决办法
  13. mysql的配置文件名称是_【MySQL学生手册】MySQL的配置文件
  14. 图片怎么无损放大?不影响清晰度这么做
  15. Ruby ERB模板注入检测
  16. 大厂面试中HR可能会问到的问题
  17. 指令、微程序、微指令、微命令、微操作之间的联系
  18. postman 获取接口参数_postman 接口参数化操作
  19. ps导出gif时是html,ps导出gif图步骤图解
  20. QueryDSL 关于Q类找不到的问题

热门文章

  1. linux电脑培训,电脑培训Linux服务器初始化Shell
  2. 发了篇paper,双非二本的她直博浙大
  3. 【开学季限时免费】下载19880元大数据开发全链路教程(视频+源码)
  4. 在职场中,长得漂亮真的有用吗?
  5. 商业项目中最受欢迎的 7 种编程语言
  6. mysql innodb表损坏_MySQL数据库INNODB表损坏修复处理过程分享
  7. 32位hex转浮点 python_python——int()、hex()、oct()、bin()、float()数值类型转换函数
  8. 怎样让电脑速度变快_硬盘在电脑中起什么作用?
  9. n以内的素数c语言,关于求N以内素数的一点小问题(N小于一亿)
  10. java密码学原型算法_java密码学原型算法实现——双线性对.pdf