D - 小木棒
D - 小木棒
Problem Description
George有一些长度相等的木棒,他随意的将这些木棒切成长度最多是50的小木棒。麻烦来了,他现在想将这些杂乱的小木棒恢复到原来的木棒,但是他忘记了原来到木棒的数量和长度。请你帮助他设计一个程序计算出原来木棒可能的最小长度,所有小木棒的长度均表示为大于0的整数。
Input
每组输入数据包括两行。第一行是George切后小木棒的个数,最多有64根小木棒;第二行是这些小木棒的长度,这些长度表示为空格分开的整数。输入样例以整数0表示结束。
Output
输出一行,即为原始木棒可能的最小长度。
Sample Input
9
5 2 1 5 2 1 5 2 1
4
1 2 3 4
0Sample Output
6
5
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std; int a[], n, now;
bool vis[]; bool dfs(int len, int cnt, int p){ //当前需要的木棍长度,当前已拼接的木棍个数,当前拼接的下标 if(cnt == n) return true; //已经拼成了n个木棍,可行
if(len == ) { //当前需要的木棍长度为0
len = now; //把len置为当前检测长度 now
p = n; //把搜索下标置为最大
} int lst = ;
for(int i=p-; i>=; i--){ //剪枝:再同一根木棍的拼凑中,不用反复搜索较大木棍,[0, p]
if(!vis[i] && a[i] <= len && a[i] != lst){ //剪枝:如果和上一个不可行长度相等,则跳过
vis[i] = true; // 取当前木棍 再搜索
if(dfs(len - a[i], cnt + , i)) // 可行 return true
return true;
vis[i] = false; // 不可行,则需要回退状态,不选当前木棍
lst = a[i]; // 记录上一个不可行的木棍,和这个相等的都不用判
if(len == now) return false; // 剪枝: 如果有任何一个不能构成len长度,则return false
}
}
return false;
} int main(){
int maxx, sum, ans; // 分别记录最长的木棍,总长度,答案
while(~scanf("%d", &n) && n){
sum = ;
for(int i=; i<n; i++) {
scanf("%d", &a[i]);
sum += a[i];
}
sort(a, a+n); //sort 默认升序排序
maxx = a[n-]; //取最大的元素
ans = sum; //ans初始化为sum,如果[maxx, sum/2]范围内都找不到解,一定是全部合成一根 for(int i=maxx; i<=sum/; i++){ //剪枝:如果[maxx, sum/2]范围内都找不到解,答案是sum
if(sum%i == ) { //剪枝:当i是sum的因子,才有可能是原木棍长度
memset(vis, , sizeof vis); //每次搜索前,把所有木棍置为未选择状态
now = i; //当前搜索的目标长度是i if(dfs(i, , n)) {
ans = i; //剪枝:找到的第一组可行解直接跳出
break;
}
}
}
printf("%d\n", ans);
}
return ;
}
D - 小木棒的更多相关文章
- 小木棒HDU1455(DFS+剪枝)
题意:HDU1455 给出n个小木棒的长度,他们是又数根长度相同的木棒剪短得来的,问没剪短之前的木棒长度最短是多少. 思路: 见代码:https://www.cnblogs.com/fqfzs/p/9 ...
- hdu 1455 N个短木棒 拼成长度相等的几根长木棒 (DFS)
N根短木棒 能够拼成几根长度相等的长木棒 求长木棒的长度 如果答案不止一种 输出最小的 Sample Input95 2 1 5 2 1 5 2 141 2 3 40 Sample Output65 ...
- 洛谷—— P1120 小木棍 [数据加强版]
https://www.luogu.org/problem/show?pid=1120 题目描述 乔治有一些同样长的小木棍,他把这些木棍随意砍成几段,直到每段的长都不超过50. 现在,他想把小木棍拼接 ...
- P1120/UVA307 小木棍(sticks) 题解
题目描述 pdf 题解 注意的问题是,各个原始木棒的长度都是一样的! 说一下本题的总思路即:DFS+超强力剪枝!(详见本人的 AC 程序) 首先,我们要从小到大枚举原始木棒的长度len,也就是枚举答案 ...
- 洛谷P1120 小木棍 (搜索+剪枝)
搜索的经典题. 我们要求木根的最小长度,就要是木根的数量尽可能多,可以发现木根的长度一定可以整除所有小木棒的总长度,从小到大枚举这个可能的长度,第一次有解的就是答案. 关心的状态:当前正在拼哪根木棍, ...
- Codeforces 721E Road to Home
题意 输入第一行有4个数,分别为\(L,n,p,t\),分别表示总长度为\(L\)的路,中间有\(n\)个互不相交的区间,现在要用长度为\(p\)的小木棒从左往右铺路(木棒不能被折断,也不能有重叠,且 ...
- hdu 1455 Sticks(dfs+剪枝)
题目大意: George有许多长度相同的木棍,随机的将这些木棍砍成小木条,每个小木条的长度都是整数单位(长度区间[1, 50]).现在George又想把这些小木棒拼接成原始的状态,但是他忘记了原来他有 ...
- hdu 5543 Pick The Sticks(动态规划)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5543 题意:给你一根长为m的长木板和一些小木棒,每一根小木棒有它的长度和价值,这些小木棒要放在长木板上 ...
- UESTC_吴队长征婚 2015 UESTC Training for Search Algorithm & String<Problem E>
E - 吴队长征婚 Time Limit: 10000/4000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
随机推荐
- 嵌入式:FreeRTOS的使用(未完)
为了方便与UCOS对比,顺序按照UCOS那篇编写. 0.一些移植.系统相关 1.框架写法(个人习惯相关) 1-1.main 函数里创建一个开始任务 int main(void) { 初始化外设 xTa ...
- Aaliyun Linux 64 安装jdk+mysql+tomcat
参考: http://www.blogjava.net/amigoxie/archive/2013/02/22/395605.html http://bbs.aliyun.com/read/17704 ...
- axios基础用法
概述: 1.axios:一个基于Promise用于浏览器和nodejs的HTTP客户端.本质是对ajax的封装. 特征: 1>从浏览器中创建XMLHttpRequest 2>从node.j ...
- 【学时总结&模板时间】◆学时·10 & 模板·3◆ AC自动机
◇学时·10 & 模板·3◇ AC自动机 跟着高中上课……讲AC自动机的扩展运用.然而连KMP.trie字典树都不怎么会用的我一脸懵逼<(_ _)> 花一上午自学了一下AC自动机 ...
- javascript--select标签的添加删除功能的使用
在网页开发中,常常遇见这种问题,给定两个框,A和B,和几个图片按钮,A中存在几个操作,点击图片按钮,填加至B中,或者从B中移除等,这种效果如何实现,本文加以总结. 几种效果图如下: 原始图: ...
- Vue.js中 computed 和 methods 的区别
官方文档中已经有对其的解释了,在这里把我的理解记录一下Vue中的methods.watch.computed computed 的使用场景 HTML模板中的复杂逻辑表达式,为了防止逻辑过重导致不易维护 ...
- PyCharm+QT Designer整合
CMD下使用pip安装PyQt4或者PYQT5 这里要注意,你下载的PYQT5不包含QT designer 还要:pip3 install PyQt5-tools,好像Pyqt5中将designer分 ...
- mysql 5.7 配置初始化及修改 ROOT 用户密码
1.修改配置文件 my.ini 放在 mysql\bin [mysqld] basedir=C:\Mysql datadir=C:\Mysql\data port=3306 # server_id = ...
- flask过滤器
过滤器的本质就是函数.有时候我们不仅仅只是需要输出变量的值,我们还需要修改变量的显示,甚至格式化.运算等等,而在模板中是不能直接调用 Python 中的某些方法,那么这就用到了过滤器. 过滤器的使用方 ...
- C语言学习记录_2019.02.02
变量在第一次被使用之前应该赋初值 scanf(“%d”,&price); scanf(“price%d %d”,&price); scanf中的东西一定是要输入的东西. 定义常量:c ...