传送门

http://poj.org/problem?id=1011

题目大意

已知原来有等长若干木棒,现在给你一堆断了的木棒的长度,问原来的木棒最短是多长

题目类型

DFS + 剪枝 + “贪心优化”

思路

http://blog.csdn.net/lyy289065406/article/details/6647960

三个剪枝

1)设最长的木棒长度max ,木棒长度和sum, 则可能区间为[max, sum/2] 并且 长度能被sum整除

2)一次拼接中,一次循环中,同长度的木棒只检测一次

3)每次拼接的第一个木棒,如果不成功则说明这个木棒一定不能成功。所以break

一个优化

需要逆序搜索。(两个短的比一个长的更有用。)

代码

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std;
#define N 70 //int visnum;
int mu[N];
bool vis[N];
int n; int ncount = ; bool dfs(int goal,int visnum, int len=, int s = n-) { ncount++; //int succeed = 0;
if (visnum == n) {
return true;
}
int last = -;
for (int i = s; i >= ; i--) {
if (vis[i] ||mu[i] == last) continue;
//if (!vis[i] && mu[i] != last && mu[i] + len <= goal) {
//last = mu[i];
vis[i] = true;
//visnum++; if (mu[i] + len < goal) {
if (dfs(goal,visnum+, len+mu[i],i))
return true;
else last = mu[i];
} else if (len + mu[i] == goal) {
if (dfs(goal,visnum+))
return true;
else last = mu[i];
} vis[i] = false;
//visnum--; if (len == ) break;
//}
}
return false;
} int main() {
while (scanf("%d", &n)+ && n) {
int i;
int sum = ;
int max = ;
for (i = ; i < n; i++) {
scanf("%d", &mu[i]);
sum += mu[i];
if (mu[i] > max) max = mu[i];
}
sort(mu, mu+n); //visnum = 0;
//memset(vis,0,sizeof(vis));
//printf("454 = %d\n",dfs(454)); for (i = max; i <= sum/; i++) {
if (sum % i == ) {
//printf("search %d\n", i);
//visnum = 0;
memset(vis, false, sizeof(vis));
if (dfs(i,) == ) break;
//printf("search end\n");
}
}
//printf("sum = %d\n", sum);
if (i >= sum/+) i = sum;
printf("%d\n", i);
//printf("count = %d\n", ncount);
}
return ;
}

POJ 1011:木棒的更多相关文章

  1. OpenJudge 2817:木棒 / Poj 1011 Sticks

    1.链接地址: http://bailian.openjudge.cn/practice/2817/ http://poj.org/problem?id=1011 2.题目: 总时间限制: 1000m ...

  2. 搜索+剪枝——POJ 1011 Sticks

    搜索+剪枝--POJ 1011 Sticks 博客分类: 算法 非常经典的搜索题目,第一次做还是暑假集训的时候,前天又把它翻了出来 本来是想找点手感的,不想在原先思路的基础上,竟把它做出来了而且还是0 ...

  3. DFS(剪枝) POJ 1011 Sticks

    题目传送门 /* 题意:若干小木棍,是由多条相同长度的长木棍分割而成,问最小的原来长木棍的长度: DFS剪枝:剪枝搜索的好题!TLE好几次,终于剪枝完全! 剪枝主要在4和5:4 相同长度的木棍不再搜索 ...

  4. POJ 1011 - Sticks DFS+剪枝

    POJ 1011 - Sticks 题意:    一把等长的木段被随机砍成 n 条小木条    已知他们各自的长度,问原来这些木段可能的最小长度是多少 分析:    1. 该长度必能被总长整除    ...

  5. POJ 1011 Sticks 【DFS 剪枝】

    题目链接:http://poj.org/problem?id=1011 Sticks Time Limit: 1000MS   Memory Limit: 10000K Total Submissio ...

  6. 木棒,POJ(1011)

    题目链接:http://poj.org/problem?id=1011 解题报告: #include <cstdio> #include <cstring> #include ...

  7. Sticks POJ - 1011 少林神棍 dfs四次剪枝

    http://poj.org/problem?id=1011 题意:若干根棍子被截成小段的木棒,现在给你这些木棒,问最短可以拼出的棍子长度. 题解:搜索,dfs(r,m) 二个参数分别代表还剩r个木棒 ...

  8. 【POJ 1011】 Sticks

    [题目链接] http://poj.org/problem?id=1011 [算法] 深搜剪枝 首先我们枚举木棍的长度i,那么就有s/i根木棍,其中s为木棍长度的总和,朴素的做法就是对每种长度进行搜索 ...

  9. poj 1011

    http://poj.org/problem?id=1011 这是一道POJ的搜索的题目,最开始确实难以理解,但做过一些搜索的题目后,也没那么难了. 大概题意就是,现在有N根木头,要拼成若干根木头,并 ...

随机推荐

  1. C++ 学习笔记(一) cout 与printf 的不同之处

    作为一个嵌入式开发的猿,使用打印调试程序是必不可少的,拿到新的项目第一件事就是捣鼓打印.这次也不例外有打印才有耍下去的底气.在之前零零碎碎的C++学习中,还是一边学一边做项目的状态下能用printf解 ...

  2. 【思维题 状压dp】APC001F - XOR Tree

    可能算是道中规中矩的套路题吧…… Time limit : 2sec / Memory limit : 256MB Problem Statement You are given a tree wit ...

  3. k8s的资源限制及资源请求

    容器的资源需求及限制:  需求:requests   ##定义容器运行时至少需要资源  限制:limits     ##定义容器运行时最多能分配的资源    requests:pod.spec.con ...

  4. mysql 的 case when 用法

    正确的格式: case when condition then result when condition then result when condition then result else re ...

  5. 2.什么是composer与packgist,composer的安装

    目录 学习地址: composer与packgist关系图片 composer的安装; 配置composer 修改国内镜像 用composer安装与卸载插件 composer插件升级后报错 学习地址: ...

  6. 《linux设备驱动开发详解》笔记——8阻塞与非阻塞IO

    8.1 阻塞与非阻塞IO 8.1.0 概述 阻塞:访问设备时,若不能获取资源,则进程挂起,进入睡眠状态:也就是进入等待队列 非阻塞:不能获取资源时,不睡眠,要么退出.要么一直查询:直接退出且无资源时, ...

  7. makedown语法

    文章转载至:https://blog.csdn.net/u014061630/article/details/81359144#1-%E5%BF%AB%E6%8D%B7%E9%94%AE 前言 写过博 ...

  8. 水题:51Nod1095-Anigram单词

    1095 Anigram单词 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 Description 一个单词a如果通过交换单词中字母的顺序可以得到另外的单词b,那 ...

  9. 将系统从.Net Core2.0升级到.Net Core2.1

    最近将手头的一个.Net Core2.0开发的小系统升级到最新的Core2.1.升级期间遇到了一些问题,现将问题以及解决方法整理汇总一下. 一是作为笔记,二也为跟各位分享一下.如过能帮到看到这帖子的人 ...

  10. Python3异常-AttributeError: module 'sys' has no attribute 'setdefaultencoding'

    基于python3.6.1版本,在一个.py文件中,加入这3行: import requests, re, sys reload(sys) sys.setdefaultencoding("u ...