![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
详解
lzoi_hmh
蒟蒻一枚
展开
-
线段树基础入门详解(适用于初学者)
由于以前看多了各种博客,关于线段树的讲解总是十分冗长,因此特此作文,大概讲解基本概念及操作,适用于初学者。初次写博,多多包涵一、线段树的概念 线段树在各个节点保存一条线段(数组中的一段子数组),主要用于高效解决连续区间的动态查询问题,由于二叉结构的特性,它基本能保持每个操作的复杂度为O(logn)。(看不懂不用管,没啥用) 这个图是线段树求数组array[2, 5, 1, 4, 9, 3]的区间最小和的例子(原创 2017-07-10 16:18:58 · 577 阅读 · 0 评论 -
NOIP 2006普及组 明明的随机数详解
1.思路这道题就是一道桶排序,或称基数排序 算法基本思路:用数组num[i]来表示数值为i的数出现了多少次,例:若读入一数3,则num[3]++;读入一数10,则num[10]++最后从1开始循环整个num数组,把出现了1次或以上的数(也就是num值不为0的数)全部输出,输出结果正好就是按数值顺序从小到大排好序的放到这道题中,因为题目只是要求把不重复的数顺序输出,所以我们甚至不需要计算次数,只用把原创 2017-10-06 15:57:21 · 785 阅读 · 0 评论 -
NOIP 2005普及组 采药 详解
思路简单的01背包裸题(如果不知道什么是01背包的话去搜一搜),用f[j]表示时间为j时的最优解 需要注意的是如果用一维,第二层循环内的j一定要从大到小逆推。因为当我们枚举到i,假设此时正在求解f[6],我们需要用带到上一层的f[3]的值。如果是顺序枚举的话,那么第i-1层的f[3](也就是不能取第i株草药的f[3])的值很可能已经被第i层的f[3](也就是能取第i株草药的f[3])的值所覆盖了(原创 2017-10-05 17:35:41 · 1033 阅读 · 0 评论 -
NOIP 2002普及组 过河卒详解
本文图片引用自“kcfzyhq”的博客1.分析首先我们来看看下面这个图,这个图基本表现了题目的意思:一个卒要从图的左上角A点走到右下角B点,而其中有一点C为马的位置,C与其周边马能走到的P1~P8点共9个点是不能走的,问有多少种从A走到B的方法我们可以先把这个问题当数学问题来考虑相信许多朋友以前都遇到过类似的数学问题,对于点[i,j],它的走法数等于它上方点与其左方点走法数之和(因为只能向下或向右走原创 2017-10-05 15:53:55 · 3742 阅读 · 3 评论 -
洛谷1594 护卫队(动态规划) 解析
题目护卫车队在一条单行的街道前排成一队,前面河上是一座单行的桥。因为街道是一条单行道,所以任何车辆都不能超车。桥能承受一个给定的最大承载量。为了控制桥上的交通,桥两边各站一个指挥员。护卫车队被分成几个组,每组中的车辆都能同时通过该桥。当一组车队达到了桥的另一端,该端的指挥员就用电话通知另一端的指挥员,这样下一组车队才能开始通过该桥。每辆车的重量是已知的。任何一组车队的重量之和不能超过桥的最大承重量。原创 2017-08-27 15:50:28 · 1017 阅读 · 0 评论 -
NOIP 2000普及组 乘积最大 详解
经典DP题,f[i][j] 表示在前i个数字中插入j个乘号时的最大乘积,num[i][j]表示从第i个字符到第j个字符之间的数字,i从0开始 状态转移方程:f[i][j]=max(f[k][j-1]*num[k][i-1]),1<=k#include <iostream>#include <iomanip>#include <cstring>#include <algorithm>usin原创 2017-08-20 16:12:57 · 1466 阅读 · 0 评论 -
NOIP 2005提高组 过河(状压DP) 详解
题目描述在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧。在桥上有一些石子,青蛙很讨厌踩在这些石子上。由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数轴上的一串整点:0,1,……,L(其中L是桥的长度)。坐标为0的点表示桥的起点,坐标为L的点表示桥的终点。青蛙从桥的起点开始,不停的向终点方向跳跃。一次跳跃的距离是S到T之间的任意正整数(包括S,T)。当原创 2017-08-13 17:08:20 · 902 阅读 · 0 评论 -
NOIP 2001普及组 最小公倍数和最大公约数问题 详解
这道题一看上去就是一道十分简单的枚举搜索题,本来还以为要做些精巧操作才能过,后来发现直接暴力枚举就行了,原码如下:#include <iostream>#include <cstdio>#include <cstring>using namespace std;bool gcd(int a,int b,int divider)//判断最大公约数{ int tmp=min(a,b);原创 2017-08-19 18:28:42 · 1155 阅读 · 0 评论 -
高精度乘法入门详解(高精乘高精)
高精度乘法。输入两个正整数,求它们的积。【算法分析】类似加法,可以用竖式求乘法。在做乘法运算时,同样也有进位,同时对每一位进行乘法运算时,必须进行错位相加,如图3、图4。 分析c数组下标的变化规律,可以写出如下关系式:ci = c’i +c”i +…由此可见,c i跟a[i]*b[j]乘积有关,跟上次的进位有关,还跟原c i的值有关,分析下标规律,有c[i+j-1]= a[i]*b[j]+ x原创 2017-08-19 17:49:02 · 30606 阅读 · 8 评论 -
高精度减法入门详解
高精度减法输入两个正整数,求它们的差。 【算法分析】 类似加法(如果是没有学过加法的同学,参照博客高精度加法入门详解) 同样可以用竖式求减法。在做减法运算时,需要注意的是:被减数必须比减数大,同时需要处理借位。高精度减法的参考程序:#include<iostream>#include<cstdio>#include<cstring>using namespace std;int mai原创 2017-08-19 17:44:51 · 786 阅读 · 0 评论 -
高精度加法入门详解
高精度加法输入两个正整数,求它们的和。 【分析】 输入两个数到两个变量中,然后用赋值语句求它们的和,输出。但是,我们知道,在C++语言中任何数据类型都有一定的表示范围。而当两个被加数很大时,上述算法显然不能求出精确解,因此我们需要寻求另外一种方法。在读小学时,我们做加法都采用竖式方法,如图1。 这样,我们方便写出两个整数相加的算法。 如果我们用数组A、B分别存储加数和被加数,用数组C存储结原创 2017-08-19 17:39:40 · 1592 阅读 · 0 评论 -
POJ 3281 Dinging(网络流最大流)解析
一、题目Description Cows are such finicky eaters. Each cow has a preference for certain foods and drinks, and she will consume no others. Farmer John has cooked fabulous meals for his cows, but he forgot原创 2017-07-11 17:27:54 · 272 阅读 · 0 评论 -
NOIP2017提高组D2T1 奶酪 解析
这显然是一道并查集(如果没有学过并查集的童鞋还是去找找别的博客吧)思路比较简单,就是如果两个洞相交(或相切),就把它们连入一个集合,可以想象一个集合就是一条通道我们只需要判断每一条通道是否存在元素与底部、顶部相连即可。如果都有,那么输出Yes那么问题来了,如何判断两个球是否相交(切)呢?其实如果你数学很好、做题经验丰富 ,你就会知道了:如果两个球的半径之和>=两个球球心的距离,那么...原创 2018-10-17 16:52:19 · 398 阅读 · 0 评论