题目的大意是给了你有限个棍子以及每个棍子的长度,而且所有的棍子都是由有限个长度相同的棍子截断得到的,让你求被截棍子的最小长度

搜索剪枝神题,做的我够呛

提供一个比较好的解题报告  http://www.cnblogs.com/mycapple/archive/2012/08/14/2638430.html

比较奇怪的是数组开小了WA了,开大就过了

代码还是比较挫的

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std; int shu[];
int hash[];
int feng,n,ok,chu,fail;
int nhash[]; void dfs(int all,int add)
{
int i;
if(add==chu){
ok=;return ;
}
if(ok==||fail==){
return ;
}
if(all>&&hash[]==){ //第一根木棍没有被利用,就结束整个搜索
fail=;return;
} for(i=;i<=n;i++){
if(hash[i]==)continue; if(all==(add*feng)){
if(hash[i-]==){//当前的第一根木棍 组成一定要成功
return;
}
}
if((all+shu[i])<=((add+)*feng)){
if(shu[i-]==shu[i]&&hash[i-]==)continue;
hash[i]=;
if((all+shu[i])==((add+)*feng))
dfs(all+shu[i],add+);
else
dfs(all+shu[i],add);
hash[i]=;
}
}
} int cmp(int a,int b){
return a>b;
} int main()
{
int all,i,j;
while(scanf("%d",&n)!=EOF){
if(n==)return ;
int max=,temp;
all=; for(i=;i<=n;i++){
scanf("%d",&shu[i]);
all+=shu[i];
if(shu[i]>max)max=shu[i];
}
sort(&shu[],&shu[n+],cmp); for(i=max;i<=all;i++){
if(all%i!=)continue;
for(j=;j<=n;j++)hash[i]=;
hash[]=;
feng=i;
chu=all/i;
fail=;
ok=;
dfs(,);
if(ok==)break;
} printf("%d\n",feng);
} return ;
}

poj1011---DFS的更多相关文章

  1. poj1011 Sticks(DFS+剪枝)

    题目链接 http://poj.org/problem?id=1011 题意 输入n根棍子的长度,将这n根棍子组合成若干根长度相同的棍子,求组合后的棍子的最小长度.这题是poj2362的加强版,思路与 ...

  2. poj1011(DFS+剪枝)

    题目链接:https://vjudge.net/problem/POJ-1011 题意:给定n(<=64)条木棍的长度(<=50),将这些木棍刚好拼成长度一样的若干条木棍,求拼出的可能的最 ...

  3. POJ1011 (DFS+剪枝)

    Sticks Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 129606   Accepted: 30388 Descrip ...

  4. poj1011 Sticks(dfs+剪枝)

    Sticks Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 110416   Accepted: 25331 Descrip ...

  5. poj1011 && uva307 DFS + 剪枝

    将木棒从大到小排列,保证每次的选择都是最长可选的木棒. 剪枝: 1 . 如果第 i 根木棒被选择却无法成功拼接,那么后面与其长度相同的也不能选择. 2 . 如果第 cnt + 1 根木棒无法成功拼接, ...

  6. poj1011 Sticks (dfs剪枝)

    [题目描述] George took sticks of the same length and cut them randomly until all parts became at most 50 ...

  7. dfs+剪枝 poj1011

    Sticks Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 113547   Accepted: 26078 问题描述 Ge ...

  8. POJ1011 木棒(dfs+剪枝)

    问题重述: Description乔治拿来一组等长的木棒,将它们随机地砍断,使得每一节木棍的长度都不超过50个长度单位.然后他又想把这些木棍恢复到为裁截前的状态,但忘记了初始时有多少木棒以及木棒的初始 ...

  9. 【poj1011】 Sticks

    http://poj.org/problem?id=1011 (题目链接) 题意 给出一大堆小棍子的长度,需要把他们拼成几根长度相等的大棍子,求大棍子的最短长度. Solution 经典搜索题,剪枝剪 ...

  10. POJ1011

    今天搞了一下传说中的经典搜索题——poj1011,果然里面充斥着各种巧妙的剪枝,做完之后回味一下还是感觉构思太巧妙,所以总结记录一下加深理解. 原题:http://poj.org/problem?id ...

随机推荐

  1. java 实现JSON数据格式化

    关键在于好的算法这个代码来源于网络,算法已在注释中添加. 工具地址: 链接:https://pan.baidu.com/s/1Ns3cqi0SG3qSqatrZBrl4A 提取码:2enp 复制这段内 ...

  2. VIM操作基础命令

    VIM操作基础命令 1 文件操作 1.1 打开文件 VIM 使用 –o 或 –O 选项打开多个文件,其中 –o 表示垂直并排,例如 vim -o lesson4 lesson5 lesson6.大O表 ...

  3. NFS的安装配置使用

    /////////////////////////////NFS///////////////////////////////////////////////////写在前面:NFS在数据传输/信息传 ...

  4. EditText实现输入限制和校验

    EditText实现输入限制和校验 一.方法 1)输入限制 1.通过android:digits限制只能输入小写abc android:digits="abc" 2.通过andro ...

  5. phpexcel: 数据导出

    // 设置列名最多40个 $cols = array( "A", "B", "C", "D", "E" ...

  6. 案例学习:留言本制作V1、V2

    需求V1: 请设计一个留言本功能的程序,包括普通用户发布和查看留言,管理员登录.查看和删除留言. 实验指导内容详见留言本制作(1) 需求V2: 1.请修改留言本程序的功能,添加普通用户添加登录功能,用 ...

  7. Django进阶Model篇002 - 模型类的定义

    一.创建数据模型. 实例: 作者模型:一个作者有姓名. 作者详情模型:把作者的详情放到详情表,包含性别.email 地址和出生日期,作者详情模型与作者模型之间是一对一的关系(OneToOneField ...

  8. git如何回滚远程仓库

    git如何回滚远程仓库 http://www.cnblogs.com/iloveyou-sky/p/6534409.html

  9. iRed邮箱使用情况

    iRedAdmin-Pro 在域名的用户列表里直接显示了邮箱使用情况的百分比,并有一个细小的进度条以不同颜色标示百分比情况.用户的邮箱限额定义在 mailbox.quota,当前使用情况定义在 use ...

  10. Java基础学习-代码块

    /*代码块: * 用{}修饰的代码 * 1.局部代码块:控制变量,存在方法中,控制变量的生命周期(作用域) * 2.构造代码块:提取构造方法中的共性,每次创建对象,都会执行,并且在构造方法执行之前执行 ...