POJ-1011

【poj1011】木棒 Description乔治拿来一组等长的木棒,将它们随机地砍断,使得每一节木棍的长度都不超过50个长度单位。然后他又想把这些木棍恢复到为裁截前的状态,但忘记了初始时有多少木棒以及木棒的初始长度。请你设计一个程序,帮助乔治计算木棒的可能最小长度。每一节木棍的长度都用大于零的整数表示。Input输入包含多组数据,每组数据包括两行。第一行是一个不超过64的整数,表示砍断之后共有多少节木棍。第二行是截断以后 阅读详情

 深搜,剪枝

这组数据用的时间应该超过一秒了,可提交还是AC了。

数据:

64
40 40 30 35 35 26 15 40 40 40 40 40 40 40 40 40 40 40 40 40 40 

40 40 43 42 42 41 10 4 40 40 40 40 40 40 40 40 40 40 40 40 40 

40 25 39 46 40 10 4 40 40 37 18 17 16 15 40 40 40 40 40 40 40 

40

#include <iostream>

using namespace std;

 

int n,a[64],mark[64],totalLen,sLen;

 

void kSort(int low,int high)

{

int pivotkey = a[low],i = low, j=high;

while(i < j){

while(i<j && a[j] <= pivotkey)

j--;

a[i] = a[j];

while(i<j && a[i] >= pivotkey)

i++;

a[j] = a[i];

}

a[i] = pivotkey;

if(low < high){

kSort(low,i-1);

kSort(i+1,high);

}

}

bool dfs(int temp, int k, int num)

{

if(num == totalLen/sLen) return true;

else if(temp == sLen)

dfs(0,0,num+1);

else{

int i,pre=0;// ?????

for(i=k; i<n; i++) 

if(mark[i]==0 && a[i] != pre && a[i] + temp <= sLen){

mark[i] = 1;

pre = a[i];

if(dfs(temp+a[i],i+1,num))

break;

mark[i] = 0;

if(k==0)

return false;

  }

// cout << pre << endl;

if(i==n)

return false;

else

return true;

}

}

int main()

{

int i;

scanf("%d",&n);

while(n){

totalLen = 0;

memset(a,0,sizeof(a));

memset(mark,0,sizeof(mark)); // mark 大小

for(i=0; i<n; i++){

scanf("%d",&a[i]);

totalLen += a[i];

}

kSort(0,n-1);

sLen = a[0];

while(sLen <= totalLen){

while(totalLen % sLen)

sLen++;

if(dfs(0,0,0)){

printf("%d/n",sLen);

break;

}

memset(mark,0,sizeof(mark));

sLen++;

}

scanf("%d",&n);

}

return 0;

}

 
POJ1011题解(dfs+减枝) POJ1011题解(dfs+减枝,好理解一点) 题意:n根不同长度的小棍,拼成若干长棍,要这些长棍的长度相等,并且小棍刚好用完,问拼成长棍的最短长度是? 思路:首先考虑搜索的方向,最短,那肯定是从最短的情况开始递增,最短的可能情况那肯定就是最长的的单个棍子,所以首先把这些小棍排序,从大到小,并计算这些棍子总和,拼成的长棍的长度从最长的小棍开始搜索,搜索的过程也是判断,用总和除以这个长度得到应该拼成的长棍个数,递归搜索判断小棍之间能否相组合成满足这么多个长度相等的长棍。 在搜索过程中 注意四个地方可以剪枝(效 阅读详情

相关推荐

基于Ansys Fluent和Mechanical的血管稳态流固耦合模型

流固耦合模型在医学中也会被用到,本次小编为大家带来针对人造血管内血液流动的仿真实例。 在开物云平台上找到Workbench 点击进入:https://cloud.yuansuan.cn/?user_source=community 在左侧的Toolbox中找到对应的模块:Fluid Flow(Fluent)和Static Structure 双击“Geometry”,进入建模功能 文件-打开-找到保存的模型文件 退回到主界面,在fluid flow(Fluent)中找到mesh

huasheng233的博客 3910

小木棍

传送门!题目分析首先分析可原来的小木棍的最小的长度应该在 Lmax-∑L(这是显然的啊) 那么我们把小木棍长度降序排列,便于剪枝和操作 从小到大枚举长度,len需要满足∑L%len==0(这也是显然啊) DFS中有三个参数 x表示当前要拼成长度为len的大木棍剩余的长度 next表示上一个枚举木棍的位置,因为从大到小排序了,下一个枚举的木棍应该比当前的木棍小 num表示已经拼

HT008的Blog 475

如何利用Arcgis进行地统计学分析(三):空间插值方法选择与优化

本文深入探讨了在Arcgis中进行地统计学分析时,如何根据探索性数据分析(EDA)结果科学选择与优化空间插值方法。文章对比了IDW、RBF、克里金等主流方法的适用场景与核心参数,并通过实战案例详解了从数据诊断到模型调优的完整流程,强调结合半变异函数与趋势分析进行“对症下药”,以提升插值结果的精度与可靠性。

weixin_29281915的博客 120

搜索例题讲解--小木棍

题目【 问题描述】 乔治有一些同样长的小木棍, 他把这些木棍随意砍成几段, 直到每段的长都 不超过 50。 现在, 他想把小木棍拼接成原来的样子, 但是却忘记了自己开始时有多少根 木棍和它们的长度。 给出每段小木棍的长度, 编程帮他找出原始木棍的最小可能长度。 【 输入】 输入文件共有二行。 第一行为一个单独的整数 N 表示砍过以后的小木棍的总数, 其中 N≤60, 第 二行为

Dr.Holmes的博客 6336

Linux实战:rMATS可变剪切分析从零到一,避坑指南与结果深度解析

本文详细介绍了在Linux系统上从零开始部署rMATS进行可变剪切分析的完整流程,包括环境搭建、安装避坑指南、参数优化及结果解读。特别针对gfortran依赖、数学库配置等常见问题提供解决方案,并深入解析JC与JCEC结果的差异及可视化技巧,帮助生物信息学研究者高效完成可变剪切分析。

weixin_30394669的博客 410

如何创建 SAP ABAP CDS View 的 Association

所以本文我们虽然学习了如何创建 SAP CDS View 的 association,知道了 association 是用来在 CDS View 里将两张数据库表关联起来,但根本不知道怎么使用这个 association. 而且从 association 的写法来看,似乎和本教程之前介绍 inner join,left join 这些数据库表的连接操作没什么区别,都是根据两张表的 carrid 和 connid 字段相同进行的连接。只看到了我们在 CDS View 源代码实现里,放出来的四个字段。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 904

剪木棒 BFS深搜

题目描述乔治采取了相同长度的棍子并随机剪断,直到所有部分的长度最多为50个单位。现在他想把棍棒还原到原来的状态,但是他忘记了原来他有多少棍棒,以及他们原来的时间。请帮助他,并设计一个程序,计算这些棒的最小可能的原始长度。所有以单位表示的长度都是大于零的整数。输入输入包含2行的块。第一行包含切割后的零件数量,最多有64个零件。第二行包含由空格分隔的部分的长度。该文件的最后一行包含零。输出输出应包含原...

qq_41486817的博客 1076

Kimodo 入门教程(一)英伟达开源人形机器人动捕数据集训练运动学动作扩散模型

Kimodo是一个基于700小时商用光学动作捕捉数据集训练的运动学动作扩散模型,能够生成高质量的人体和机器人3D动作。该模型支持通过文本提示和多种约束条件(如关键帧、末端执行器位置等)进行控制,并提供数字人类和类人机器人两种模型变体。安装方式包括软件包安装和源代码安装两种,需要配置HuggingFace令牌以访问文本编码器。推荐使用GPU加速,最低需要17GB显存。项目提供命令行生成和交互式演示两种使用方式,演示程序支持时间轴编辑和实时3D可视化。模型分为商用友好版和受限版,其中SMPL-X版本需要额外申请

2506_90492529的博客 1930

棍子Sticks(poj_1011)[经典搜索]

【题意描述】 George用相同的长度棍子,将他们随机切成最多64个单位的长度,现在,他想回到原来的状态,但他忘了他原来的多少根,以及他们原本是多长。请帮助他和设计一个程序,计算最小的可能的原始长度。所有长度均大于零的整数。 【输入】 输入包含2行的块。第一行:切成多少根,最多有64根。第二行切成的每一根的长度。文件的最后一行包含零,表示结束。 【输出】 输出每行应包含...

weixin_30348519的博客 180

智能车图像处理16-进阶篇8--右环岛状态机与补线

这篇文章主要讲述智能车竞赛中如何判断右环岛并且进行状态补线。

taiyuezyh的博客 1万+

RTT Studio和Cubemx联合开发

1. RTT studio创建工程 创建工程 ## 创建完成以后的目录结构 2. 配置CubuMx 双击cubumx的图标打开CubeMx 配置时钟 生成代码 构建后的代码结构 编译代码满屏错误:不要慌 3. 新增脚本 新建scons脚本文件 SConscript 脚本内容如下 import os from building import * cwd = GetCurrentDir() src = Glob('*.c') # add cubemx drivers src = Split('''

Car12 1565

POJ-1011: Sticks(dfs)

棍子时限:1000 MS 内存限制:10000 K提交材料共计:151760 接受:36143描述乔治拿出同样长的棍子,随意地剪,直到所有的部分都长到最多50个单位。现在他想把棍子还给原来的状态,但他忘记了原来有多少根棍子,也忘了原来有多少根棍子。请帮助他,并设计一个程序,以计算尽可能最小的原始长度的这些棍子。以单位表示的所有长度都是大于零的整数。输入输入包含2行块。第一行包含了切割后的棒件数量,...

usernamezzz的博客 524

Pandas滚动窗口的妙用:动态计算列数据的最大值

Pandas的滚动窗口(rolling window)功能是数据分析中处理时间序列数据的重要工具。本文通过实例演示了如何使用rolling(window=4).max()计算DataFrame列A的滚动最大值,并将结果存入新列Max_Range。该方法会在4个元素的滑动窗口内计算最大值,前3行因数据不足显示为NaN。这种技术广泛应用于金融分析(如股价波动)、数据平滑和趋势识别等场景,能有效帮助分析数据的动态变化特征。示例展示了从数据准备到结果输出的完整流程,体现了Pandas在处理滑动窗口计算时的高效性和便

m0_74337424的博客 53

poj1011,我自己的理解

这是我的第一篇文章

qq_51972900的博客 2189

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

poj1011

题目有难度。主要难点在于DFS剪枝

小小小小杜 777

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

poj 1011 sticks

poj 1011 sticks Sticks Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 160439 Accepted: 38508 Description George took sticks of the same length and cut them randomly until all parts becam...

miracle from life 349

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

poj1011 sticks

传送门:poj1011 题意:给你一些长度不同的棍子,让你把他们拼成长度相同的新棍子,问最小长度是多少 枚举所有可能长度,dfs并不难写,重点是剪枝,将棍子长度按从大到小排序后从前往后dfs,这里有一点是如果把一个棍子当要组成的新棍子的第一根都无法组合成功,那么放在后面更不可能和其他棍子组成想要的长度了,可以这样考虑:如果这个棍子在后面那么多棍子都还没用的情况下都和它们组成不了想要的长度,等到

WA是一笔财富 531

poj 1011 小棍问题

/* * poj 1011 经典的全搜题 by sunmoonstar * * 题目大意:给出一些长度不大于 50 的木棍, 要求你把这些小木棍拼成 * 长度相同木棍,当然长度越小越好。 * * 解题思路:这个题最近做了很多次,我比较有发言权了。 * 思想很简单,一个接一个的把木棍拼起来,最后把木棍用光。 *

baisung的专栏 619

POJ 1011 Sticks

 写这篇文章呢,有个很邪恶的目的,就是提高博客的访问量——据我所知“POJ 1011”这个关键词似乎非常极其的热门——是不是?当时我做这题的时候的确就写了下面这么长的代码,不过你读一遍就会发现 3/4 的内容都被注释掉了,那些内容多少能说明我的思想,而剩下来的那部分是可以 AC 的。PS. 我真的不喜欢全局变量。PPS. 以后这里不会再放ACM的代码了;感兴趣的话可以等河蟹

IF 1018

木棒POJ1011

木棒POJ1011 思路 题干在这:POJ1011 按着《算法竞赛进阶指南》的代码写的,熟悉一下深搜和剪枝 ac代码 #include<cstdio> #include<algorithm> #include<iostream> using namespace std; int a[100], v[100], n, len, cnt; bool dfs(int ...

没有自旋的π介子 259

POJ1011-Sticks

http://poj.org/problem?id=1011 #include<iostream> #include<cstring> #include<algorithm> using namespace std; int p[65],vis[65],s,j,n; bool cmp(int a,int b) { return...

weixin_30670151的博客 137

POJ 1011的一个快速实现

 http://acm.pku.edu.cn/JudgeOnline/problem?id=1011通过剪枝和记录历史搜索数据可以通过poj和这组变态数据 6440 40 30 35 3526 15 40 40 4040 40 40 40 4040 40 40 40 4040 40 40 43 4242 41 10 4 4040 40 40 40 4040 40 40 40 404

whwhzzz的专栏 943

POJ - 1011

传送门 POJ - 1011 题面: Sticks Time Limit: 1000MS Memory Limit: 10000K Description George took sticks of the same length and cut them randomly until all parts became at most 50 units long. Now he wants to...

RicardoYPeng的博客 270

Poj 1011-Sticks

Poj 1011-Sticks   题意:有n根木棍(n 分析:这题不愧是经典中的经典,很早之前就写过,先后2次都没写出来,然后就放了一段时间,这是第三次了,终于写出来了。 基本思路是我们计算出出所有的木棍长度的长度和sum,从小到大枚举它的约数,找到第一个可行解就行了。 具体实现的话:首先,木棍有64根,搜索树是非常巨大的,如果不加任何剪枝,程序根本运行不出来,所以必须进行剪枝。 之

我的ACM,我的梦!!! 1003

Poj 1011 &&UVA - 307 Sticks

牛客网 poj 1011 题目: George took sticks of the same length and cut them randomly until all parts became at most 50 units long. Now he wants to return sticks to the original state, but he forgot how many sticks he had originally and how long they were original

qq_35975367的博客 452
上一篇: 1010(stamps),acm.pku.edu.cn
下一篇: ubuntu10.04下Qt无法编译的问题
squirrel20
博客等级 码龄16年 1粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值