(错误记录)

题目链接: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. Solution -「NOI 2008」「洛谷 P3980」志愿者招募

    \(\mathcal{Description}\)   Link.   一项持续 \(n\) 天的任务,第 \(i\) 天需要至少 \(a_i\) 人工作.还有 \(m\) 种雇佣方式,第 \(i\) ...

  2. kubernetes之数据管理

    volume emptyDir [machangwei@mcwk8s-master ~]$ kubectl apply -f mcwVolume1.yml #部署emptydir pod/produc ...

  3. 树莓派GPIO开发(一):激光头传感器模块的使用

    配置环境 系统:Raspbian11(64位) 设备:树莓派CM4 一.写在前面 主要为了测试我捡漏买的CM4的拓展版 拓展板子没有焊接引脚,但是预留的接口 手动焊接一下 测试成功 ,说明我捡的这块板 ...

  4. 详细介绍Windows下也能够使用osw性能升级历史

    1.Windows系统历史性能分析困难背景 在Linux/Unix上.要追朔历史性能,一般採用部署nmon进行性能监控採集与存储的方式实现.可是却没有在Windows上的版本号. Windows系统假 ...

  5. 科普IIS是什么?IIS介绍!

    1.Microsoft IIS 是允许在公共Intranet或Internet上发布信息的Web服务器.Internet Information Server通过运用超文本传输协议(HTTP)传输信息 ...

  6. 在sublime上运行node

    1.安装node,这个就简单了,不多说了.默认会安装在C盘,也可以自己设定盘符,如D.E 2.打开Sublime Text -> Tools -> Build -> Build Sy ...

  7. curl的HTTP参数速查表

    curl简介 curl是一个开源的命令行工具,它基于网络协议,对指定URL进行网络传输,得到数据后不任何具体处理(如:html的渲染等),直接显示在"标准输出"(stdout)上. ...

  8. Apache-log4j漏洞复现

    前言:昨天晚上当我还在睡梦中时,圈内爆出了核弹级的漏洞,今天我复现一下, 再开始前我们先建立一个maven项目,将pom.xml文件导入 <?xml version="1.0" ...

  9. RESTful风格了解

    最近在学习springboot,一直听到一个词叫RESTful风格,今天找了一下书了解了一番.spring mvc除了支持json数据交互外,还支持RESTful风格 RESTful也称为REST(r ...

  10. 数据平滑处理-均值|中值|Savitzky-Golay滤波器

    均值滤波器 均值滤波器是一种使用频次较高的线性滤波器.它的实现原理很简单,就是指定一个长度大小为奇数的窗口,使用窗口中所有数据的平均值来替换中间位置的值,然后平移该窗口,平移步长为 1,继续重复上述操 ...