看了题目心中只有一个字——搜索!!!

  但是很显然,朴素的搜索(回溯)绝壁超时。

  剪枝&优化(要搞很多,要不然过不了)

  1:从小到大搜索它们的因数,这样找到就exit。

  2:将数据从大到小排序,因为长的是肯定要选的,所以早点选可以减小接下来的可能。

  3:如果一组它后面的几组都无法搜出,那么可以直接跳过这一长度。

  4:如果一根木棍不行,那么和它相同长度的木棍肯定不行。

  5:若在新一组的拼凑中,最大的木棍无法完成,则接下来的这几组都不行(因为那根最长的木棍是迟早要用的)。

  然后就是一顿爆搜(代码挺短)

  CODE

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=70;
int a[N],n,sum,i,tot,x,need;
bool f[N];
inline void read(int &x)
{x=0; char ch=getchar();while (ch<'0'||ch>'9') ch=getchar();while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
}
int comp(int a,int b) { return a>b; }
void dfs(int m,int last,int sum,int cnt)
{if (cnt==need) { printf("%d",m); exit(0); }for (int i=last;i<=tot;++i)if (f[i]&&a[i]+sum<=m){f[i]=0;if (a[i]+sum==m) dfs(m,1,0,cnt+1); else dfs(m,i+1,a[i]+sum,cnt);f[i]=1;if (sum+a[i]==m||!sum) break;while (a[i]==a[i+1]) i++;}
}
int main()
{read(n);for (i=1;i<=n;++i){read(x);if (x>50) continue;a[++tot]=x;sum+=x;}sort(a+1,a+tot+1,comp);for (i=1;i<=sum;++i)if (!(sum%i)) {memset(f,true,sizeof(f));need=sum/i;dfs(i,1,0,0);}return 0;
}

转载于:https://www.cnblogs.com/cjjsb/p/8000832.html

Luogu P1120 小木棍 [数据加强版]相关推荐

  1. 题解 P1120 【小木棍 [数据加强版]】

    题面 乔治有一些同样长的小木棍,他把这些木棍随意砍成几段,直到每段的长都不超过50. 现在,他想把小木棍拼接成原来的样子,但是却忘记了自己开始时有多少根木棍和它们的长度. 给出每段小木棍的长度,编程帮 ...

  2. P1120-小木棍 [数据加强版]

    吸口氧气才能过 1 #include <bits/stdc++.h> 2 #define _for(i,a,b) for(int i = (a);i < b;i ++) 3 #def ...

  3. AC日记——小木棍【数据加强版】 洛谷 P1120

    题目描述 乔治有一些同样长的小木棍,他把这些木棍随意砍成几段,直到每段的长都不超过50. 现在,他想把小木棍拼接成原来的样子,但是却忘记了自己开始时有多少根木棍和它们的长度. 给出每段小木棍的长度,编 ...

  4. 洛谷[P1120 小木棍]

    洛谷[P1120 小木棍] 题目: 思路: 枚举小木棒可能的长度,从数组最大值开始枚举,这个值能被总长度整除才是可行的 在使用dfs枚举小木棒的每一种可能,如果不可能就找下一个可能的长度开始枚举 注意 ...

  5. P1120 小木棍题解

    这题难度很唬人呀!!! 题目描述 乔治有一些同样长的小木棍,他把这些木棍随意砍成几段,直到每段的长都不超过 505050. 现在,他想把小木棍拼接成原来的样子,但是却忘记了自己开始时有多少根木棍和它们 ...

  6. 洛谷P1120小木棍

    肝了一天的题了,求过 题目描述 乔治有一些同样长的小木棍,他把这些木棍随意砍成几段,直到每段的长都不超过 5050. 现在,他想把小木棍拼接成原来的样子,但是却忘记了自己开始时有多少根木棍和它们的长度 ...

  7. 洛谷 P1120 小木棍 题解

    这就是一道明显的爆搜题(人家洛谷也说了,,,),只是需要几个小小的优化,接下来为大家介绍一下: 1.将木棍先排个序(用处后面会讲),记住 长度>50 的要去掉 2.因为每一根的长度都不大于50, ...

  8. 洛谷 小木棍(暴力+剪剪剪剪枝)

    题目链接: 小木棍 - 洛谷 思路: 如果只考虑暴力,做法很简单,枚举所有可能的最终长度,都跑一遍dfs,取最小结果即可,本题难就难在大量的剪枝,具体见代码. 我的思路也是参考了大佬的博客:题解 P1 ...

  9. 小木棍(洛谷-P1120)

    题目描述 乔治有一些同样长的小木棍,他把这些木棍随意砍成几段,直到每段的长都不超过5050. 现在,他想把小木棍拼接成原来的样子,但是却忘记了自己开始时有多少根木棍和它们的长度. 给出每段小木棍的长度 ...

  10. c语言贪吃蛇黑方框,[求助][贪吃蛇]源程序,请教其中一个问题。

    [求助][贪吃蛇]源程序,请教其中一个问题. 源程序如下: 我的问题是,调节游戏速度时,数字为什么越大时,有时候竟然越快? #define N 200 #include #include #inclu ...

最新文章

  1. 清华大数据系列讲座——大数据发展与区块链应用成功举办
  2. tensorflowgpu利用率为0_奥普特冲科:曾侵犯竞争对手商业机密,产能利用率或虚高...
  3. C++实现顺序查找(附完整源码)
  4. Git区分文件名大小写
  5. jQuery和MooTools的真正区别
  6. iOS-Senior20-Map定位
  7. RH413-Linux系统下umask测试
  8. splay伸展树基础操作(bzoj 1861: [Zjoi2006]Book 书架)
  9. Eclipse Error:“ An API baseline has not been set ” 解决办法
  10. 2021黑龙江人高考成绩查询,2021年黑龙江高考成绩查询网站查分网址:https://www.lzk.hl.cn/...
  11. Session过期处理
  12. Wordpress淘宝客专用链接跳转插件Pretty Link Lite
  13. 8uftp服务器用户名密码,8uftp怎么用,8uftp怎么用,详细介绍8uftp的用法
  14. Java Shiro 设置 anon 无效
  15. 误删通话记录?这几个方法能恢复
  16. 小程序开发——页面背景色设置
  17. VSCode,插件安装失败,解决方法
  18. LWN:使用Jitsi进行视频会议!
  19. linux是什么操作系统_Linux的优势
  20. 使用HTML制作个人简历

热门文章

  1. Fusion Studio 17 for Mac(视频后期特效合成软件)
  2. 如何在Mac上将您的Apple ID更改为其他电子邮件地址?
  3. Mac和iPhone之间如何设置通用剪贴板?
  4. Ubuntu18.04 修改IP地址、查看网关、防火墙
  5. 自动化测试必备实用工具,帮你提高工作效率 | 码云周刊第 88 期
  6. kmp 学习【字符串-kmp学习】
  7. 互联网+商业 济宁苏宁生活广场打造智慧城市范本
  8. 三星投8万亿扩充10nm、7nm产能:骁龙835爆发
  9. 在 Mac OS X 安装gcc编辑环境,make不能用时参考
  10. 在DOS中使用系统还原工具