青少年编程知识记录 codecoming

【分治】----快速幂

1.幂幂(power)是指乘方运算的结果。n^m指该式意义为m个n相乘。把n^m看作乘方的结果,叫做n的m次幂,也叫n的m次方。2.幂的数学表示和规则23 * 24 =2734 * 34=383.分治法求快速幂在平常中我们如果遇到求 ab的时候,可能是一个一个挨个乘起来,也就是将a乘b次,如果b的值非常大时,在算法竞赛中又有时间限制,累次乘几乎是不行的。(不要说这个时候用pow() 函数)例如:21000,用循环累次乘的话需要1000次。现在我们如果要求211的值,那么就要计算&nbs
作者:亿万年的星光 分类:算法 浏览:

【二分】----基础用法

0.二分法简介二分法是一种查找算法要求:数据必须是有序序列核心思想:掐头去尾取中间1. 引入对于一个有序数组,如{1,3,6,8,23,56,78,99},如果我们要查找其中的一个数78的下标位置,按照以前的写法,可能会这么写123456789101112131415161718#include<cstdio>#include<iostream>using namespace std;int main(){    int a[]={
作者:亿万年的星光 分类:算法 浏览:

【贪心】----排队打水

一、基础版排队打水【题目描述】学校里有一个水房,水房里一共装有m 个龙头可供同学们打开水,每个龙头每秒钟的供水量相等,均为1。现在有n 名同学准备接水,他们的初始接水顺序已经确定。将这些同学按接水顺序从1到n 编号,i号同学的接水量为wi。接水开始时,1到m 号同学各占一个水龙头,并同时打开水龙头接水。当其中某名同学j完成其接水量要求wj后,下一名排队等候接水的同学k马上接替j 同学的位置开始接水。这个换人的过程是瞬间完成的,且没有任何水的浪费。
作者:亿万年的星光 分类:算法 浏览:

【贪心】----最优装载、背包、乘船问题

1.最优装载题目描述:有n个物体,第i个物体的重量为wi(wi为正整数)。选择尽量多的物体,使得总重量不超过C。【分析】由于只关心选择的物品的最大数量(而不是最大重量,最大重量需要考虑DP),所以装重的物体没有装轻的物体划算。这里只需对n个物体按重量递增排序,依次选择每个物体直到装不下为止。这是一种典型的贪心算法,它只顾眼前,却能得到最优解。例1:【题目描述】有n个物体,第i个物体的重量为wi(wi为正整数)。选择尽量多的物体,使得总重量不超过C。【输入描述】n和C以及n个整数表示的wi。【输出
作者:亿万年的星光 分类:算法 浏览:

【贪心】----找零钱问题

一、找零钱问题例题1:有 1 元,5元,10元,20元,100元,200元的钞票无穷多张。现在使用这些钞票支付X元,最少需要多少张钞票。X = 628最佳支付方法:3张200块的,1张20块的,1张5块的,3张1块的共需3+1+1+3 = 8张直觉告诉我们:尽可能多的使用面值较大的钞票!贪心法: 遵循某种规律,不断贪心的选取当前最优策略的算法设计方法。分析:面额为1元、5元、10元、20元、100元、200元,任意面额是比自己小的面额的倍数关系。 所以当使用一张较大面额钞票时,若用较小面额钞票替
作者:亿万年的星光 分类:算法 浏览:

【贪心】----基本概念

一、基本概念所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,它所做出的仅仅是在某种意义上的局部最优解。贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性(即某个状态以后的过程不会影响以前的状态,只与当前状态有关。)所以,对所采用的贪心策略一定要仔细分析其是否满足无后效性。二、基本思路(1)建立数学模型来描述问题(2)把求解的问题分成若干个子问题(3)
作者:亿万年的星光 分类:算法 浏览:

【DFS】搜索回溯基础

0.前言       搜索与回溯是计算机解题中常用的算法,很多问题无法根据某种确定的计算法则来求解,可以利用搜索与回溯的技术求解。回溯是搜索算法中的一种控制策略。它的基本思想是:为了求得问题的解,先选择某一种可能情况向前探索,在探索过程中,一旦发现原来的选择是错误的,就退回一步重新选择,继续向前探索,如此反复进行,直至得到解或证明无解。如迷宫问题:进入迷宫后,先随意选择一个前进方向,一步步向前试探前进,如果碰到死胡同,说明前进
作者:亿万年的星光 分类:算法 浏览:

【高级篇】C++中的sort函数详解

0.简介sort函数用于C++中,对给定区间所有元素进行排序,默认为升序,也可进行降序排序。sort函数进行排序的时间复杂度为n*log2n,比冒泡之类的排序算法效率要高,sort函数包含在头文件为#include<algorithm>的c++标准库中1.sort的参数sort(start,end,cmp)start:表示排序数组起始的位置end:表示排序数组结束的位置cmp:用于排序的方法,可以不填,不填默认升序2.数组中的用法#include<bits/stdc++.h&g
作者:亿万年的星光 分类:C++知识 浏览:

【排序】----插入排序

1.基本思想在要排序的一组数中,假定前n-1个数已经排好序,现在将第n个数插到前面的有序数列中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。2.过程·(1)从第一个元素开始,该元素可以认为已经被排序;·(2)取出下一个元素,在已经排序的元素序列中从后向前扫描;·(3)如果该元素(已排序)大于新元素,将该元素移到下一位置;·(4)重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;·(5)将新元素插入到该位置后;·(6)重复步骤2~5。动图演示:3.参考代码#include&
作者:亿万年的星光 分类:算法 浏览:

【排序】----选择排序

1.基本思想每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在待排序的数列最前,直到全部待排序的数据排完。2.过程首先初始化最小元素索引值为首元素。依次遍历待排序数列,遇到小于该最小索引位置处的元素则刷新最小索引为该较小元素的位置。直至遇到尾元素,结束一次遍历,并将最小索引处元素与首元素交换。·初始化最小索引值为第二个待排序数列元素位置,同样的操作,可得到数列第二个元素即为次小元素;以此类推。着重在于“选”动图演示:#include<iostream>using nam
作者:亿万年的星光 分类:算法 浏览: