首页 > TAG信息列表 > 木棒

AcWing 167. 木棒

一、朴素版本 #include <bits/stdc++.h> using namespace std; const int N = 65; int s[N], n, len, sum; bool st[N]; // u:正在填充第几个木棒 // res:正在填充的,最后一个木棒,目前的长度是多少 bool dfs(int res, int u) { //因为填充的逻辑是填充满了一个,才能走到下一个

算法提高之搜索:剪枝与与优化

目录 1、小猫爬山2、数独3、 木棒4、 生日蛋糕 1、小猫爬山 2、数独 3、 木棒 4、 生日蛋糕

C语言程序设计100例之(36):四方定理

例36   四方定理 题目描述 四方定理是众所周知的:任意一个正整数n,可以分解为不超过四个整数的平方和。例如:25=12+22+22+42,当然还有其他的分解方案,25=42+32和25=52。给定的正整数n,编程统计它能分解的方案总数。注意:25=42+32和25=32+42视为一种方案。 输入格式 第一行为正整数t(t≤

牛牛切木棒

链接:https://ac.nowcoder.com/acm/contest/22425/E来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 有一根长度为a(3≤a≤1e18)(3 \leq a \leq 1e18)(3≤a≤1e18)的木棒,现在想将木棒分成一些段(每段木棒长

【解题报告】洛谷P1120 小木棍

【解题报告】洛谷P1120 小木棍 题目链接 https://www.luogu.com.cn/problem/P1120 思路 ——摘自《算法竞赛进阶指南》 我们可以从小到大枚举原始木棒的长度 \(len\) , 它应该是所有木棍长度的和 \(sum\) 的因数,并且原始木棒的根数 \(cnt\) 应该等于 \(\dfrac {sum} {len}\) 对于

n根木棒组成周长最大的三角形

题目描述 有n根小木棒,任选三根木棒组成一个三角形,问三角形周长最大是多少。(保证至少存在一种选法能组成三角形) 输入数据 第一行为一个正整数n,3=<n<=100 第二行为n个正整数,代表小木棒长度,不超过100. 输出数据 三角形周长的最大值 样例输入 5 1 2 3 4 5 样例输出 12 #inclu

AtCoder Regular Contest 126题解(A-C)

似乎是第一次认真打ARC,其实仍然在摆烂 A - Make 10 题意:给长度为2,3,4的木棒分别$a$,$b$,$c$根,求能拼成至多几根长度恰为10的木棒 题解:发现无论如何长为10的木棒都包含一个长度为6的,所以考虑先使用长度为3的 按以下顺序:①3+3+4 ②3+3+2+2 ③4+4+2 ④2+2+2+2+2是最优的,直接计算即

--木棒--

木棒 题目描述 核心思路 首先明确一下概念:木棒指原来为被砍断的,木棍指砍断后的。 我们可以从小到大枚举原始木棒的长度的长度length(也就是枚举答案)。假设有 c n t

AcWing 167. 木棒

剪枝常用策略: 优化搜索顺序:可以先搜规模小的分支。 排除等效冗余:例如对于一个组合型枚举,\(1,2,3\)与\(2,3,1\)这是一样的,所以可以排除一下。 可行性剪枝:搜索过程中及时对状态进行检查,发现分支不符合本意,即提早发现是一个死胡同,就剪掉; 最优性剪枝:如果当前代价已经超过了最优解,

小木棍(dfs + 剪枝)

原题链接 https://ac.nowcoder.com/acm/problem/50243 思路 这个题一开始考虑的是二分然后验证答案是否可行,但是后来发现要求的是最大长度的最小值,而且数据范围只有3000,所以可以从小到大枚举长度,第一次找到的就是最小的合法数据。首先来看以下性质: 1.枚举出来的最小长度一定是总长

贪心木棒学习解题过程中的发现

1.memset 在解题的过程中很多地方都遇到了这个函数,上网搜索发现用于快速给大型数据赋初值的函数。 头文件:"memory.h"或"string.h" 函数原型:void *memset(void *s,int ch,size_t n); 将s中前n个字节(typedef unsigned int size_t)用ch替换并返回s,作用是在一段内存块中填充某个给

搜索:小木棍

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

2021-03-14

北大算法基础 美丽栅栏 _练习代码 #include<iostream> #pragma warning(disable : 4996)//禁用scanf错误提示 using namespace std; const int UP = 0; const int DOWN = 1; const int MAXN = 25; long long c[MAXN][MAXN][2]; //c[i][k][DOWN] 是i根木棒以k木棒打头向下的

dfs之剪枝

剪枝在dfs的应用——以切木棒问题为例 在dfs中,大致有如下几种剪枝方法: 优化搜索顺序 在搜索过程中,可以先从大的开始搜索。道理很简单,以填充空间为例,当我们先用体积大的物体填充时,空间会更快被填满,而剩余可选的决策数就少了。相反,如果从小物体开始,那么还会有很多空间,而可供选

《算法笔记》二分—木棒切割问题&求凸多边形外接圆最大半径

木棒切割问题 大意:给N根木棒,通过切割至少得到K段长度相同的木棒,长度相同的木棒最长能有多长 思路:已知结论,长度相同的木棒长度越长,切割得到的K越小,可以二分法,即求最后一个满足“k<=K”的L,可转换为第一个满足“k>K”的位置,再减一 #include<stdio.h> #include<algorithm> using names

Codeforces Round #662 (Div. 2)

目录Codeforces Round #662 (Div. 2)A. Rainbow Dash, Fluttershy and Chess ColoringB. Applejack and StoragesC. Pinkie Pie Eats Patty-cakes参考: Codeforces Round #662 (Div. 2) A. Rainbow Dash, Fluttershy and Chess Coloring 题意: 给一个正方形区域上色,类似于国际象棋:给

sticks

# 题意一组长度相等的木棒,把他们随机砍断,使得每一节木棍的长度不超过50个单位,恢复到剪前的状态,不知道开始有多少根以及他们的长度,计算木棒可能的最小长度 # 题解因为木棒是等长的所以最开始木棒的长度一定是所有木棒长度和约数,并且原始木棒的根数就等于sum/len 参数中所包含的状态

Sticks

— By cuizhenkai1.优化搜索顺序从小到大排序, 优先尝试较长的木棍。理解: 从最大开始可以较快的排除不可能的分支,避免dfs进入比较深的树。 若从最小开始,则有可能前几根可以拼好,但是后面的不能满足条件,让dfs进入了更深的层。 2. 排除等效冗余A ) 限制先后加入一根原始木棍的长度

烧木棒计时问题

有很多木棒,每根木棒燃尽需要60min,如何计时45分钟 感觉有点像分治算法 答案: 点燃第一根的两头,在点燃第二根的一头,等第一根烧完就是30分钟,这个时候在点燃第二根的另一头,这个时候就是又过了15分钟,一共30分钟。

题解 P3799 【妖梦拼木棒】

无良宣传一下博客wwwwww 文章列表 - 核融合炉心 - 洛谷博客 知识点:组合数学/暴力枚举 题干: 有 \(n\) 根木棒, Yoomu 现从中选 \(4\) 根, 想要组成一个 正三角形 , 问有几种选法? 分析题意 : 由题干知 , 欲由 \(4\) 根木棒 , 组成一个正三角形 , 则必然有 两根 的 长度相同 , 且

题解|《算法竞赛进阶指南》 Sticks

题目描述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 originally. Please he

HDU 6374 度度熊拼三角

度度熊拼三角 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 1764    Accepted Submission(s): 792   Problem Description 度度熊有 N 根木棒,每根木棒的长度为ai。 现在要挑选其中的三根,问能拼出的

167. 木棒(dfs)

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

每周一道算法题005:切木棒

问题: 假设要把长度为n厘米的木棒切分为1厘米长的小段,但是1根木棒只能由1人切分,当木棒被切分为3段后,可以同时由3个人分别切分木棒。求最多有m个人时,最少要切分几次。 譬如n=8,m=3时如下图所示,切分4次就可以了。 求当n=20,m=3时的最少切分次数。求当n=100,m=5时的最少切分次数。 思路: 这道题最

Sticks

题目链接 题意:给你一组等长木棒,然后他随意砍断成n个木棒,木棒长度不一,但你知道分别是多少,要你求出原始木棒可能的最小长度。 思路:首先那个原始木棒的长度肯定是其总长度的约数,然后也肯定大于等于所有木棒的最大值,然后去DFS,要注意的是,DFS的过程中我肯定先从大的取起,这样可以优化搜索