poj1011 深搜入门
2016-03-16 21:21
316 查看
题目意思很简单:就是要把之前掰断的棍子还原成多少根一样长的棍子就好了
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int a[100]; bool used[100]; int aim,num,n; int cmp(int x,int y){ return (x>y?1:0); } bool dfs(int stick,int len,int pos) { int i; bool sign=(len==0?true:false); //num是从大到小的,所以不用怕当为一根棍子的情况的 if(stick==num) return true; for(i=pos+1;i<n;i++){ if(used[i]) continue; if(a[i]+len==aim){ used[i]=true; if(dfs(stick+1,0,-1)) return true; used[i]=false; return false; } else if(len+a[i]<aim){ used[i]=true; if(dfs(stick,len+a[i],i)) return true; used[i]=false; //下面的if和while都是重要减枝,否则就超时了 if(sign) return false; while(a[i]==a[i+1]) i++; } } return false; } int main() { while(scanf("%d",&n),n) { int sum=0; for(int i=0;i<n;i++){ scanf("%d",&a[i]); sum+=a[i]; } //从大到小排序 sort(a,a+n,cmp); for(aim=a[0];aim<=sum;aim++){ //要可以被除才会有可能复原棍子,num位原来的长度 if(sum%aim==0){ num=sum/aim; memset(used,false,sizeof(used)); if(dfs(1,0,-1)){ printf("%d\n",aim); break; } } } } return 0; }
相关文章推荐
- JavaScript的三种工业化调试方法
- NopCommerce商城系统中的eventbus
- vs2010使用C
- POJ - 1159 Palindrome(dp-回文变形)
- VS2013运行OpenGL例子提示找不到<GL/glew.h>,GL/freeglut_ext.h,GL/freeglut.h,glew32.lib,freeglut.lib等
- STM32 大小端模式 与 堆栈及其增长方向分析
- LeetCode104—Maximum Depth of Binary Tree
- #
- mysql主从复制(超简单操作)已验证
- protobuf
- Hadoop MapReduce模块 Module 4: MapReduce
- jQuery Validation中使用remote属性进行异步验证
- 关于PHP接收不到表单提交的POST信息
- iOS版本更新的App提交审核发布流程
- 拓扑排序
- Graphics 框架画各种图形(圆、三角形、扇形、弧线、圆角矩形等等)
- 无线个域网及蓝牙
- smarty中基本数据的获取方式
- DAO的设计模式
- FlashBack闪回技术--错误的删除了数据,想要补救