题意:HDU1455

给出n个小木棒的长度,他们是又数根长度相同的木棒剪短得来的,问没剪短之前的木棒长度最短是多少.

思路:

见代码:https://www.cnblogs.com/fqfzs/p/9911110.html参考自

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int maxn = ;
  4. const int INF = 0x3f3f3f3f;
  5. int n, sumv, target, aim;//target表示目标的棍子个数,aim表示目标的棍子长度,sumv为所有木棍总长度
  6. int stick[maxn], vis[maxn];//vis数组标记 ,stick存储输入的木棒长度
  7. bool cmp(int a, int b) {
  8. return a > b;
  9. }
  10. bool dfs(int cnt, int len, int pos) {
  11. if(cnt == target) return true;//根数对上就返回 退出dfs
  12. if(len == aim) return dfs(cnt+, , ); //当拼完一根后,继续拼下一根
  13. for(int i = pos; i < n; i++) {//从大到小排序后,按顺序搜索
  14. if(!vis[i] && len+stick[i] <= aim) {
  15. vis[i] = ;
  16. if(dfs(cnt, len+stick[i], i+)) return true;
  17. vis[i] = ; //只有失败才会运行到下面,否则是直接返回的
  18. if(len == ) return false; //如果第一根时失败 剪枝
  19. while(i+ < n && stick[i+] == stick[i]) i++; //如果下一根长度跟当前的失败的长度一样,剪枝
  20. }
  21. }
  22. return false;
  23. }
  24. int main() {
  25. while(~scanf("%d", &n), n) {
  26. sumv = ;
  27. for(int i = ; i < n; i++) {
  28. scanf("%d",&stick[i]);
  29. sumv += stick[i];
  30. }
  31. sort(stick, stick+n, cmp);
  32. int ans = ;
  33. for(int i = stick[]; i <= sumv; i++) {//拼好后的木棒长度只会在stick[0]和总长度之间
  34. if(sumv % i == ) {
  35. memset(vis, , sizeof(vis));
  36. aim = i;
  37. target = sumv / aim;
  38. if(dfs(, , )) {
  39. ans = aim;
  40. break;
  41. }
  42. }
  43. }
  44. printf("%d\n",ans);
  45. }
  46. return ;
  47. }

小木棒HDU1455(DFS+剪枝)的更多相关文章

  1. *HDU1455 DFS剪枝

    Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  2. AcWing:167. 木棒(dfs + 剪枝)

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

  3. hdu1455 dfs+剪枝

    Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  4. POJ1011 木棒(dfs+剪枝)

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

  5. hdu 1455 Sticks(dfs+剪枝)

    题目大意: George有许多长度相同的木棍,随机的将这些木棍砍成小木条,每个小木条的长度都是整数单位(长度区间[1, 50]).现在George又想把这些小木棒拼接成原始的状态,但是他忘记了原来他有 ...

  6. hdu1455Sticks(经典dfs+剪枝)

    Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  7. D - 小木棒

    D - 小木棒 Time Limit: 1000/1000MS (C++/Others) Memory Limit: 65536/65536KB (C++/Others) Problem Descri ...

  8. poj 1011 :Sticks (dfs+剪枝)

    题意:给出n根小棒的长度stick[i],已知这n根小棒原本由若干根长度相同的长木棒(原棒)分解而来.求出原棒的最小可能长度. 思路:dfs+剪枝.蛮经典的题目,重点在于dfs剪枝的设计.先说先具体的 ...

  9. Sticks(UVA - 307)【DFS+剪枝】

    Sticks(UVA - 307) 题目链接 算法 DFS+剪枝 1.这道题题意就是说原本有一些等长的木棍,后来把它们切割,切割成一个个最长为50单位长度的小木棍,现在想让你把它们组合成一个个等长的大 ...

随机推荐

  1. python 监听键盘事件

    #coding=utf- from tkinter import * root=Tk() def callback(event): print("点击键盘",repr(event. ...

  2. ICEM—气体罐子

    原视频下载地址:https://yunpan.cn/cPfzaLzkcFXVK  访问密码 62cf

  3. QtCreator集成的MSVC套件有问题

    MSVC编译出来的内部签名算法的程序,相同的代码,验签结果和MINGW编译出来的不一样.MINGW编译出来的结果是正确的 怀疑是因为QtCreator集成的msvc有问题,可能是编码问题,可能是其他问 ...

  4. Eclipse生成EXE文件(可视化Login/读取文件)

    Java Swing实现文件的简单读取 WindowBuilder的安装与使用 如何采用java设置一个登陆界面 package jp.services.slink2.batch.so2or; imp ...

  5. 2018-2019-2 20165210《网络对抗技术》Exp7 网络欺诈防范

    2018-2019-2 20165210<网络对抗技术>Exp7 网络欺诈防范 一.实验目标:本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法. 二.实验内容: ...

  6. P2047 [NOI2007]社交网络(洛谷)

    题目描述 在社交网络 ( Social Network ) 的研究中,我们常常使用图论概念去解释一些社会现象.不妨看这样的一个问题:在一个社交圈子里有 nn 个人,人与人之间有不同程度的关系.我们将这 ...

  7. 关于hexo-abbrlink链接undefined

    关于hexo-abbrlink hexo-abbrlink是一个hexo博客链接永久化的解决方案 支持使用不同的算法和进制对文章链接进行转换 算法 进制 生成链接 crc16 hex https:// ...

  8. Vue打包文件放在服务器后,浏览器存在缓存问题

    每次打包更新版本发到服务器上,导致偶尔会出现不能即使更新最新代码,浏览器存在缓存的问题. 解决方法:找到webpack .prod.conf.js 1.定义版本变量: const  Version = ...

  9. pop动画库简单使用小记

    - (void)animateInView:(UIView *)view{ UIImageView *imageView = [[UIImageView alloc] initWithImage:[U ...

  10. nginx虚拟主机添加

    1. 进入 /usr/local/nginx/conf/vhost 目录, 创建虚拟主机配置文件 wbs.test.com.conf ({域名}.conf). 2.打开配置文件, 添加服务如下: lo ...