(错误记录)

题目链接:https://www.luogu.com.cn/problem/P1120

题目描述:几根同样长的木棍,小冥把它们随意砍成了n段;

     然后他又吃饱了撑的想把木棍拼上;

     但是这个小冥是小年痴呆,他忘了他原来是咋切的了;

     现在要写一段程序,输入n和切断的每段木棍的长,输出原始木棍的最小可能长度。

题目思路:搜索剪枝,这道题搜索其实很好说,直接从小到大枚举长度,然后递归判断可行性;

     难点还是在剪枝上,如果不用剪枝的话只能得9分左右,这道题要用到7个剪枝;

     具体的详见代码;

代码:

#include<bits/stdc++.h>
using namespace std;
int n,arr[66]={0},ans,brr[66]={0},we,wer;//arr存木棍长度,brr存木棍是否被用过
bool cmp(int a,int b){//将所有木棍从大到小排序
return a>b;
}
bool dfs(int a,int b,int c){//a是假定小木棍的剩余长度,b是循环初始值,c是木棍根数
if(c==wer){//木棍根数对上了
return 1;
}
if(a==0){//一根木棍拼完
if(dfs(we,1,c+1)){//根数+1
return 1;
}
}
for(int i=b;i<=n;++i){
//剪枝3:下次循环的初始值完全可以接上上次循环的结束值
if(arr[i]<=a&&brr[i]!=1){//木棍没被用过&&长度没超
brr[i]=1;//标记
if(dfs(a-arr[i],i+1,c)){//-去长度
return 1;
}
brr[i]=0;//回溯
if(a==arr[i]||a==we){
//剪枝4:如果这个木棍长度与剩余长度一样,这已经是最优解了,还不行,那直接返
//剪枝5:如果剩余长度与假定木棍长度一样,和剪枝4一样,直接返
return 0;//如果写break可能过不了
}
while(arr[i+1]==arr[i]){
//剪枝6:因为排了序,所以有很多相等的数在一起,遇到相等的数直接跳
i++;
}
}
}
return 0;
}
int main(){
cin>>n;
for(int i=1;i<=n;++i){
cin>>arr[i];
ans+=arr[i];
}
sort(arr+1,arr+n+1,cmp);
for(int i=arr[1];i<=ans/2;++i){//这个数从最小木棍长度开始枚举
//剪枝1:如果枚举到所有木棍长度+起来/2还没有找到,那结果就一定是所有数加起来了,往下搜没意义了
if(ans%i==0){
//剪枝2:只有能被总长度整除的数才有可能是结果,不满足条件的直接扔掉
we=i;
wer=ans/we;
if(dfs(we,1,0)){//递归判断可行性
cout<<we;
return 0;//可以直接结束
}
}
}
cout<<ans;
return 0;
}

题解0007:小木棍(P1120)的更多相关文章

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

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

  2. 【题解】洛谷P1120 小木棍(搜索+剪枝+卡常)

    洛谷P1120:https://www.luogu.org/problemnew/show/P1120 思路 明显是搜索题嘛 但是这数据增强不是一星半点呐 我们需要N多的剪枝 PS:需要先删去超出50 ...

  3. 一本通&&洛谷——P1120 小木棍 [数据加强版]——题解

    题目传送 一道特别毒瘤能提醒人不要忘记剪枝的题. 首先不要忘了管理员的话.忘把长度大于50的木棍过滤掉真的坑了不少人(包括我). 显然是一道DFS题 .考虑剪枝. 找找搜索要面临的维度.状态:原始木棍 ...

  4. 洛谷 P1120 小木棍 [数据加强版]解题报告

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

  5. [Luogu P1120]小木棍·加强版

    #\(\mathcal{Description}\) 乔治有一些同样长的小木棍,他把这些木棍随意砍成几段,直到每段的长都不超过 \(50\) . 现在,他想把小木棍拼接成原来的样子,但是却忘记了自己开 ...

  6. 洛谷P1120 小木棍 [搜索]

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

  7. [洛谷P1120]小木棍 [数据加强版]

    题目大意:有一些同样长的木棍,被切割成几段(长$\leqslant$50).给出每段小木棍的长度,找出原始木棍的最小可能长度. 题解:dfs C++ Code: #include<cstdio& ...

  8. 洛谷——P1120 小木棍 [数据加强版]

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

  9. 洛谷 P1120 小木棍 [数据加强版]

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

随机推荐

  1. kubeasz 部署高可用 kubernetes 集群

    文章目录 环境准备 配置模板机 配置hosts解析 配置ssh 免密钥登陆 kubeasz 部署服务准备 配置主机清单 部署集群 环境准备 IP HOSTNAME SYSTEM 192.168.131 ...

  2. MacBook Pro 新手入门

    Mac从拆箱到入门   记录首次使用Mac的我的历程,不是专业的Mac使用教程,只是简单的记录.还有我在使用过程中一些用到的功能都一些小提示吧.  1.首次开机配置,对于一个完全的新手来说(也就是我) ...

  3. 封装及其作用Java

    封装 该露的露,该藏的藏 我们程序设计要求"高内聚,低耦合".高内聚就是类的内部数据操作细节自己完成,不允许外部干涉:低耦合:仅暴漏少量的方法给外部使用 ​ 封装(数据的隐藏): ...

  4. NSSCTF-easyupload2.0

    相对于easyupload3.0,这个easyupload2.0就简单的很多,也可以使用和3.0一样的做法,但是应该还是有别的做法,就比如可以使用phtml这个后缀绕过检测 使用BP抓包修改一下 放包 ...

  5. XSS Challenge靶场练习

    实验目的 学习xss的基础知识及利用方式. 实验原理 XSS 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写 ...

  6. S32Kxxx bootloader之CAN bootloader

    了解更多关于bootloader 的C语言实现,请加我Q扣: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 最近完成了S32Kxx ...

  7. 帆软和思迈特软件Smartbi产品的详细对比

    一.设计模式上 (1)finereport V10.0需要下载一个600M的设计器,采用类excel的设计模式,打开时间有20S,反复测试几次,基本都在20多秒.(测试电脑core I5 4核8G). ...

  8. svn问题总结

    有问题先尝试右键刷新,或clean up svn图标不显示 解决办法:打开注册表regedit,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curren ...

  9. 洛谷P4322.最佳团体

    题目大意 一个 \(n(1\leq n\leq 2500)\) 个节点的森林,每个点 \(i\) 有权值 \(s_{i},p_{i}(0<s_{i},p_{i}\leq 10^4)\) 以及父亲 ...

  10. Go基础知识梳理(一)

    Go基础知识梳理(一) Go中package的用法及作用 package hello 用于分包,Go通过包来管理命名空间 import ( "hello" //通过import关键 ...