当前位置: 首页 > news >正文

POJ 1011 Sticks 强大的剪枝

这道题是黑书剪枝的例题,是用方法为调整法,但是这个方法很难掌握,还是多积累些经验吧。

首先要排个序,然后从大到小遍历回溯搜索是否可组成。

回溯中有剪枝。

1,对于一个还没有匹配任何长度(need=leng)的初始长度leng,随便搜一个小与此初始长度的木棍,如果之后的搜索不能匹配,那就不能匹配了,此时就要返回上一层修改策略。

2,还有就是如果当前选的小木棍len[i]==need时,如果这样都不能匹配,由于搜索是递减顺序那么之后都不会匹配。

加上这两个剪枝就可以在poj跑的0ms了

#include<stdio.h> #include<string.h> #include<queue> #include<algorithm> using namespace std; int n,len[70],sum; int part,leng; int visit[70]={0}; int cmp(const void * a,const void * b){ int * aa=(int *)a; int * bb=(int *)b; return *aa-*bb; } int search(int now,int need,int k){//now表示已拼成几根,need表示还需要need长拼成这一根,从第k个木棍开始 int i,j; if(need==0){ now++; need=leng; k=n; } if(now==part-1) return 1; for(i=k;i>=1;i--) if(!visit[i]) if(need>=len[i]){ visit[i]=true; if(search(now,need-len[i],i-1)) return 1; visit[i]=false; if(need==leng) return 0; if(need==len[i]) return 0; while(len[i-1]==len[i]) i--; } return 0; } void dfs(){ int i,flag=0; for(i=len[n];i<=sum;i++){ if(sum%i==0){ part=sum/i; leng=i; if(search(0,i,n)) break; } } printf("%d\n",leng); } int main(){ int i; while(scanf("%d",&n) && n!=0){ sum=0; memset(visit,0,sizeof(visit)); for(i=1;i<=n;i++){ scanf("%d",&len[i]); sum+=len[i]; } len[0]=0; qsort(&len[1],n,sizeof(len[1]),cmp); dfs(); } }


相关文章:

  • 2018/3/20 noip模拟赛 5分
  • windows2003 with OpenSSH
  • java和c#通过esb服务互调用组件
  • 4、自定义cookieHandler发送请求
  • python 魔法方法补充(__setattr__,__getattr__,__getattribute__)
  • /*在DataTable中更新、删除数据*/
  • A* 简介(Amit's A star Page中译文)
  • 文本挖掘的基本过程
  • python web开发-flask读取txt文件内容
  • (C#)获取字符编码的类
  • codefroces 911G Mass Change Queries
  • Chrome浏览器几个好用的插件
  • SQL——两个表之间的更新:用一个表的字段更新另一个表的字段
  • [root]既然sudo 可以暂时获取root权限,那么为何还需要root这个用户呢
  • A*,IDA*,Dijkstra
  • android 一些 utils
  • eclipse(luna)创建web工程
  • express如何解决request entity too large问题
  • JSDuck 与 AngularJS 融合技巧
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • php的插入排序,通过双层for循环
  • 程序员最讨厌的9句话,你可有补充?
  • 初识MongoDB分片
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 如何用vue打造一个移动端音乐播放器
  • 使用 QuickBI 搭建酷炫可视化分析
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 延迟脚本的方式
  • 责任链模式的两种实现
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • (待修改)PyG安装步骤
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (五)MySQL的备份及恢复
  • (转)jQuery 基础
  • (转载)PyTorch代码规范最佳实践和样式指南
  • .net 4.0发布后不能正常显示图片问题
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • @ComponentScan比较
  • [1159]adb判断手机屏幕状态并点亮屏幕
  • [ASP.NET MVC]如何定制Numeric属性/字段验证消息
  • [BZOJ] 2427: [HAOI2010]软件安装
  • [bzoj1324]Exca王者之剑_最小割
  • [BZOJ3223]文艺平衡树
  • [Codeforces] probabilities (R1600) Part.1
  • [CSS3备忘] transform animation 等
  • [element-ui] el-dialog 中的内容没有预先加载,因此无法获得内部元素的ref 的解决方案
  • [emacs] CUA的矩形块操作很给力啊
  • [HNOI2018]排列
  • [javaSE] 看知乎学习工厂模式