小木棒HDU1455(DFS+剪枝)
题意:HDU1455
给出n个小木棒的长度,他们是又数根长度相同的木棒剪短得来的,问没剪短之前的木棒长度最短是多少.
思路:
见代码:https://www.cnblogs.com/fqfzs/p/9911110.html参考自
- #include<bits/stdc++.h>
- using namespace std;
- const int maxn = ;
- const int INF = 0x3f3f3f3f;
- int n, sumv, target, aim;//target表示目标的棍子个数,aim表示目标的棍子长度,sumv为所有木棍总长度
- int stick[maxn], vis[maxn];//vis数组标记 ,stick存储输入的木棒长度
- bool cmp(int a, int b) {
- return a > b;
- }
- bool dfs(int cnt, int len, int pos) {
- if(cnt == target) return true;//根数对上就返回 退出dfs
- if(len == aim) return dfs(cnt+, , ); //当拼完一根后,继续拼下一根
- for(int i = pos; i < n; i++) {//从大到小排序后,按顺序搜索
- if(!vis[i] && len+stick[i] <= aim) {
- vis[i] = ;
- if(dfs(cnt, len+stick[i], i+)) return true;
- vis[i] = ; //只有失败才会运行到下面,否则是直接返回的
- if(len == ) return false; //如果第一根时失败 剪枝
- while(i+ < n && stick[i+] == stick[i]) i++; //如果下一根长度跟当前的失败的长度一样,剪枝
- }
- }
- return false;
- }
- int main() {
- while(~scanf("%d", &n), n) {
- sumv = ;
- for(int i = ; i < n; i++) {
- scanf("%d",&stick[i]);
- sumv += stick[i];
- }
- sort(stick, stick+n, cmp);
- int ans = ;
- for(int i = stick[]; i <= sumv; i++) {//拼好后的木棒长度只会在stick[0]和总长度之间
- if(sumv % i == ) {
- memset(vis, , sizeof(vis));
- aim = i;
- target = sumv / aim;
- if(dfs(, , )) {
- ans = aim;
- break;
- }
- }
- }
- printf("%d\n",ans);
- }
- return ;
- }
小木棒HDU1455(DFS+剪枝)的更多相关文章
- *HDU1455 DFS剪枝
Sticks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- AcWing:167. 木棒(dfs + 剪枝)
乔治拿来一组等长的木棒,将它们随机地砍断,使得每一节木棍的长度都不超过50个长度单位. 然后他又想把这些木棍恢复到为裁截前的状态,但忘记了初始时有多少木棒以及木棒的初始长度. 请你设计一个程序,帮助乔 ...
- hdu1455 dfs+剪枝
Sticks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- POJ1011 木棒(dfs+剪枝)
问题重述: Description乔治拿来一组等长的木棒,将它们随机地砍断,使得每一节木棍的长度都不超过50个长度单位.然后他又想把这些木棍恢复到为裁截前的状态,但忘记了初始时有多少木棒以及木棒的初始 ...
- hdu 1455 Sticks(dfs+剪枝)
题目大意: George有许多长度相同的木棍,随机的将这些木棍砍成小木条,每个小木条的长度都是整数单位(长度区间[1, 50]).现在George又想把这些小木棒拼接成原始的状态,但是他忘记了原来他有 ...
- hdu1455Sticks(经典dfs+剪枝)
Sticks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- D - 小木棒
D - 小木棒 Time Limit: 1000/1000MS (C++/Others) Memory Limit: 65536/65536KB (C++/Others) Problem Descri ...
- poj 1011 :Sticks (dfs+剪枝)
题意:给出n根小棒的长度stick[i],已知这n根小棒原本由若干根长度相同的长木棒(原棒)分解而来.求出原棒的最小可能长度. 思路:dfs+剪枝.蛮经典的题目,重点在于dfs剪枝的设计.先说先具体的 ...
- Sticks(UVA - 307)【DFS+剪枝】
Sticks(UVA - 307) 题目链接 算法 DFS+剪枝 1.这道题题意就是说原本有一些等长的木棍,后来把它们切割,切割成一个个最长为50单位长度的小木棍,现在想让你把它们组合成一个个等长的大 ...
随机推荐
- python 监听键盘事件
#coding=utf- from tkinter import * root=Tk() def callback(event): print("点击键盘",repr(event. ...
- ICEM—气体罐子
原视频下载地址:https://yunpan.cn/cPfzaLzkcFXVK 访问密码 62cf
- QtCreator集成的MSVC套件有问题
MSVC编译出来的内部签名算法的程序,相同的代码,验签结果和MINGW编译出来的不一样.MINGW编译出来的结果是正确的 怀疑是因为QtCreator集成的msvc有问题,可能是编码问题,可能是其他问 ...
- Eclipse生成EXE文件(可视化Login/读取文件)
Java Swing实现文件的简单读取 WindowBuilder的安装与使用 如何采用java设置一个登陆界面 package jp.services.slink2.batch.so2or; imp ...
- 2018-2019-2 20165210《网络对抗技术》Exp7 网络欺诈防范
2018-2019-2 20165210<网络对抗技术>Exp7 网络欺诈防范 一.实验目标:本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法. 二.实验内容: ...
- P2047 [NOI2007]社交网络(洛谷)
题目描述 在社交网络 ( Social Network ) 的研究中,我们常常使用图论概念去解释一些社会现象.不妨看这样的一个问题:在一个社交圈子里有 nn 个人,人与人之间有不同程度的关系.我们将这 ...
- 关于hexo-abbrlink链接undefined
关于hexo-abbrlink hexo-abbrlink是一个hexo博客链接永久化的解决方案 支持使用不同的算法和进制对文章链接进行转换 算法 进制 生成链接 crc16 hex https:// ...
- Vue打包文件放在服务器后,浏览器存在缓存问题
每次打包更新版本发到服务器上,导致偶尔会出现不能即使更新最新代码,浏览器存在缓存的问题. 解决方法:找到webpack .prod.conf.js 1.定义版本变量: const Version = ...
- pop动画库简单使用小记
- (void)animateInView:(UIView *)view{ UIImageView *imageView = [[UIImageView alloc] initWithImage:[U ...
- nginx虚拟主机添加
1. 进入 /usr/local/nginx/conf/vhost 目录, 创建虚拟主机配置文件 wbs.test.com.conf ({域名}.conf). 2.打开配置文件, 添加服务如下: lo ...