搜索,搜索,搜索..........

在经历了无数tle后,终于也很慢很慢的速度ac了它.......大概有15ms吧,光是在pascal中就排了200多名。

题目比较简单:给你若干个值不超过50,数量不超过60的自然数,把给出的所有的数用完且只用一次,使其拼成若干个相等的自然数;

求这个最小的自然数。(题目中表示为木条长度)

在想贪心,想贪心,最后无语发现,它是搜索。

搜索的想法很简单,枚举这个自然数,然后搜索是否能拼成。

闭着眼睛都可以知道这是会tle的,于是,截肢.........不,说错了,是剪枝.........(有点血腥);

首先是一贯作风,搜索中糅合贪心,可以发现,把木棍从大到小排,按这个顺序取是容易得到最优值的----------------剪枝1

然后,发现在拼一根木棍时,可以记录一下,保证是从左往右取的(或者说从大往小),这样不会漏掉情况,可以少搜一点点.....--------------剪枝2

随后,如果某一个木棍拼完之后,其他的拼不了了,就可以剪掉这以后的搜索了,因为看看我们的搜索顺序就知道了-----------------剪枝3

一开始有小到大枚举最优值比较好,但是发现最后从大到小反而比较稳定,因为任何一个 可能作为最优值的数(是给出的数的总和的约数),那它的约数也挂定了--------剪枝4

本以为可以了, 于是一直tle,tle,tle,与此同时,学校分类练习题中这道题的答案被声称数据错误,并且标程也错了,标程中也惊现不知是剪枝还是错误的东东............

无限纠结中...............

终于,在某位不知名大牛的博客里寻得了第5个强力剪枝————在拼某一个数(木条)时,第一个用来拼的数确定之后,如果找不到方案,以后的就不要搜了(很明显,那个 没用的木条最后还是要面对无法配对的命运的.........)

终于 ,以此A掉了它........同时证明了分类练习题中的数据是正确的............感动的偶想要热泪盈眶,毕竟是纠结了一下午的题目。

stick可谓是剪枝发挥到很大极限的了,搜索的剪枝一般思路是贪心,即从某个状态以后不可能更优,甚至不可能可行,然后极不留情的剪掉它,剪掉它.........

贴代码:

program lmd;
varcan:array[0..10000]of boolean;a:array[0..100]of longint;have:array[0..100]of boolean;i,tot,n,try,ans,z,tt,m:longint;yes,bug:boolean;
procedure sort(l,r:longint);
var i,j,x,s:longint;
begini:=l;j:=r;x:=a[(l+r)shr 1];repeatwhile a[i]>x do inc(i);while a[j]<x do dec(j);if i<=j thenbegins:=a[i];a[i]:=a[j];a[j]:=s;inc(i);dec(j);end;until i>j;if i<r then sort(i,r);if l<j then sort(l,j);
end;
procedure dfs(num,now,pos:longint);//pos 剪枝2
var i:longint;
beginif num>z then begin yes:=true;exit;end;for i:=pos+1 to n doif have[i] thenbeginif a[i]+now=try thenbeginhave[i]:=false;dfs(num+1,0,0);have[i]:=true;exit;                  //剪枝3endelse if a[i]+now<try thenbeginhave[i]:=false;dfs(num,now+a[i],i);have[i]:=true;if (now=0) then exit;//终极大招剪枝5if yes then exit;end;end;
end;
beginwhile true do beginread(m);if m=0 then break;tot:=0; n:=0;for i:=1 to m dobeginread(tt);if tt<=50 then begininc(n);a[n]:=tt;tot:=tot+a[n];end;end;sort(1,n);                      //剪枝1fillchar(can,sizeof(can),true);for try:=tot downto a[1] do     beginif can[try] and (tot mod try=0) then     beginyes:=false;z:=tot div try;     fillchar(have,sizeof(have),true);dfs(1,0,0);if yes=true thenans:=tryelsebeginfor i:=a[n] to try-1 do            //剪枝4if try mod i=0 thencan[i]:=false;end;end;end;write(ans);end;
end.

poj1011 stick 强力搜索剪枝相关推荐

  1. poj 1948(搜索+剪枝)

    解题思路:这道题看到数据量,想到应该搜索+剪枝应该可以过..可是别人的A了,我的却超时了... 我用了一个mark[a][b],表示前两条边长度分别为a和b时,是否已经处理过,如果是的话就直接跳出.. ...

  2. LeetCode 47. 全排列 II(回溯+搜索剪枝)

    文章目录 1. 题目信息 2. 解题 1. 题目信息 给定一个可包含重复数字的序列,返回所有不重复的全排列. 示例:输入: [1,1,2] 输出: [[1,1,2],[1,2,1],[2,1,1] ] ...

  3. 极大极小搜索 α-β剪枝的实现

    极大极小搜索 α-β剪枝的实现 //---------搜索当前搜索状态极大值--------------------------------// //alpha 祖先节点得到的当前最小最大值,用于al ...

  4. 深搜、广搜、搜索剪枝

    搜索与回溯讲解 文章目录 深搜 方向向量: DFS代码: 题目讲解: 八皇后问题 字符序列 自然数的拆分 广搜 BFS代码: 题目讲解: 瓷砖 关系网络 bfs与dfs的用途与区别 搜索剪枝 可行性剪 ...

  5. 玩转VIM编辑器-强力搜索

    玩转VIM编辑器-强力搜索 搜索导航 导航键 描述 / 向前搜索,前向 ? 向后搜索,反向 n 跳转到下一个搜索词所在位置 N 跳转到前一个搜索词所在位置 //或?? 重复前面的搜索或反向搜索 跳转到 ...

  6. USACO 6.5.3 Betsy's Tour 搜索剪枝

    http://train.usaco.org/usacoprob2?a=BI4LEPNXcEa&S=betsy 题目大意:一个N*N的方阵(N<=7),求从左上角出发到左下角结束经过每个 ...

  7. ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 【bfs + 记忆化搜索 + 剪枝】 AC 代码

    ACM 北京区域赛 bfs+剪枝+ms 第一个一遍过的题目,基本没有看题解 记忆搜索当中,注意初始化成一个特殊值:而在访问之后,每个点就会有一个不同于INF(或者 -1等特殊标记)的值 先到先得,适者 ...

  8. Croc Champ 2013 - Round 2 (Div. 2 Edition) 贪心+ 搜索+剪枝 + 数学

    A: 直接找出最小值,看是否能被所有数整除即可 B: 判断是否出现连续的"#">=m若果存在肯定不能调. C: 题意: 两个人玩游戏(A,B),每个人分配一个字符串长度为2* ...

  9. HDU 1026 Ignatius and the Princess I 迷宫范围内的搜索剪枝问题

    这个问题是一个典型的类型的问题迷宫广泛的搜索. 在网上看到了很多解决方案. 没什么解决问题的分析报告,不指出其中的关键点.代码更像是一大抄.一些分析师也有很大的文章分析.只是不要全部命中关键,什么是广 ...

最新文章

  1. AI助力清华博士进入周杰伦战队,预告AI应用迎来黄金时代?
  2. java web 嵌套播放器_网页嵌套播放器
  3. python变量运算符_Python基础 — 变量和运算符
  4. 用华为eNSP模拟器配置Hybrid、Trunk和Access三种链路类型端口
  5. arcgis 10.1 导入数据到oracle 发布地图服务
  6. [神奇的问题啊,GetProcAddress一个不存在的API时,返回非空值,且指向另一个API]谜团解开,错不在GetProcAddress...
  7. sql server 多用户 并发_Tinyid:滴滴开源千万级并发的分布式ID生成器
  8. pytorch_gpu案例及gpu使用
  9. 对variable-sized object may not be initialized的一点理解
  10. 如何把pdf转成jpg格式?
  11. After Effects - Bodymovin 插件验货及感受
  12. php人脸识别代码,PHP实现人脸识别技术
  13. 5款瞬间复活Win7/8/10工具
  14. MapReduce的C#实现及单元测试(试验)
  15. consol32.exe
  16. php页面导出csv,使用PHP生成并导出CSV文件
  17. android 前后同时预览_GitHub 上优质项目整理,不只 Android
  18. iPhone手机开发
  19. Python爬虫抓取指定网页图片代码实例
  20. python模拟登陆抖音_抖音模拟登陆的实现

热门文章

  1. SEO8个方法:如何挖掘长尾关键词
  2. C#窗体程序连接SQL Server数据库实现账号登录、账号注册、修改密码、账号注销和实名认证(不定时更新)
  3. 听周华健专辑《少年》有感(二)-献给曾经的自己
  4. 百变头像框小程序开源 微信小程序源码
  5. no matching mac found
  6. 解决前端 node 环境跨域与404问题,yog2
  7. 动态规划问题的一般解决方案
  8. 数据科普:期权价格和相关变量的关系(投资必知必会)
  9. 关于windows Server 服务器MD5报错,System.InvalidOperationException: 此实现不是 Windows 平台 FIPS 验证的加密算法的一部分。
  10. 【4/13-15】第六章总结+课后题