POJ 1011:木棒
传送门
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:木棒的更多相关文章
- OpenJudge 2817:木棒 / Poj 1011 Sticks
1.链接地址: http://bailian.openjudge.cn/practice/2817/ http://poj.org/problem?id=1011 2.题目: 总时间限制: 1000m ...
- 搜索+剪枝——POJ 1011 Sticks
搜索+剪枝--POJ 1011 Sticks 博客分类: 算法 非常经典的搜索题目,第一次做还是暑假集训的时候,前天又把它翻了出来 本来是想找点手感的,不想在原先思路的基础上,竟把它做出来了而且还是0 ...
- DFS(剪枝) POJ 1011 Sticks
题目传送门 /* 题意:若干小木棍,是由多条相同长度的长木棍分割而成,问最小的原来长木棍的长度: DFS剪枝:剪枝搜索的好题!TLE好几次,终于剪枝完全! 剪枝主要在4和5:4 相同长度的木棍不再搜索 ...
- POJ 1011 - Sticks DFS+剪枝
POJ 1011 - Sticks 题意: 一把等长的木段被随机砍成 n 条小木条 已知他们各自的长度,问原来这些木段可能的最小长度是多少 分析: 1. 该长度必能被总长整除 ...
- POJ 1011 Sticks 【DFS 剪枝】
题目链接:http://poj.org/problem?id=1011 Sticks Time Limit: 1000MS Memory Limit: 10000K Total Submissio ...
- 木棒,POJ(1011)
题目链接:http://poj.org/problem?id=1011 解题报告: #include <cstdio> #include <cstring> #include ...
- Sticks POJ - 1011 少林神棍 dfs四次剪枝
http://poj.org/problem?id=1011 题意:若干根棍子被截成小段的木棒,现在给你这些木棒,问最短可以拼出的棍子长度. 题解:搜索,dfs(r,m) 二个参数分别代表还剩r个木棒 ...
- 【POJ 1011】 Sticks
[题目链接] http://poj.org/problem?id=1011 [算法] 深搜剪枝 首先我们枚举木棍的长度i,那么就有s/i根木棍,其中s为木棍长度的总和,朴素的做法就是对每种长度进行搜索 ...
- poj 1011
http://poj.org/problem?id=1011 这是一道POJ的搜索的题目,最开始确实难以理解,但做过一些搜索的题目后,也没那么难了. 大概题意就是,现在有N根木头,要拼成若干根木头,并 ...
随机推荐
- Spring Boot 应用 快速发布到linux服务器的脚本代码示例
前提说明:spring boot 应用打包成jar包之后要部署到Linux服务器上面运行,我用的nohup java -jar 命令,但是代码更新之后重新部署的时候覆盖原来的项目,又要手动运行ps - ...
- asp发送短信验证码 pst方式
<script language="jscript" runat="server"> Array.prototype.get = function ...
- matplotlib 设置图形大小时 figsize 与 dpi 的关系
matplotlib 中设置图形大小的语句如下: fig = plt.figure(figsize=(a, b), dpi=dpi) 其中: figsize 设置图形的大小,a 为图形的宽, b 为图 ...
- Letters CodeForces - 978C (二分)
Time limit4000 ms Memory limit262144 kB There are nn dormitories in Berland State University, they a ...
- POJ:1094-Sorting It All Out(拓扑排序经典题型)
Sorting It All Out Time Limit: 1000MS Memory Limit: 10000K Description An ascending sorted sequence ...
- Linux学习-额外(单一)核心模块编译
编译前注意事项 由于我们的核心原本就有提供很多的核心工具给硬件开发商来使用, 而硬件开发商也需要针对核心 所提供的功能来设计他们的驱动程序模块,因此, 我们如果想要自行使用硬件开发商所提供的模块 来进 ...
- [POJ 1007] DNA Sorting C++解题
DNA Sorting Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 77786 Accepted: 31201 ...
- Educational Codeforces Round 38 (Rated for Div. 2)
这场打了小号 A. Word Correction time limit per test 1 second memory limit per test 256 megabytes input sta ...
- LaTeX Hierarchical Tables
本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/52692655 简单整理一下表格中的分级 ...
- 【mysql优化 2】索引条件下推优化
原文地址:Index Condition Pushdown Optimization 索引条件下推(ICP:index condition pushdown)是mysql中一个常用的优化,尤其是当my ...