
算法初探
基础算法
fxzcloud
如果志同道合 希望你我旗鼓相当
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
图论基础算法
DijkstraDijkstra朴素版:将图中的点分为两个集合,一个集合为已经找到最短距离的点,另一个集合为还没有找到最短距离的点。初始化一个dis数组,dis[i]表示源点到i点的最短距离。外层循环n次,每次将一个点加入找到最短距离的集合。内层循环每次在未找到最短距离的集合中找到当前集合中距离源点最近的点,并用当前点去尝试更新其他点的最短距离。例题代码:import java.util.Scanner;public class Main{ static int n,m,INF = 0.原创 2020-11-24 17:40:19 · 294 阅读 · 0 评论 -
欧拉函数求互质数的个数
互质数的个数(一)思路:欧拉函数。题目链接import java.util.Scanner;public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); int t = sc.nextInt(); while((t--)>0){ long n = sc.nextLong();原创 2020-08-26 13:45:04 · 1385 阅读 · 0 评论 -
AcWing 递归与递推
费解的开关你玩过“拉灯”游戏吗?25盏灯排成一个5x5的方形。每一个灯都有一个开关,游戏者可以改变它的状态。每一步,游戏者可以改变某一个灯的状态。游戏者改变一个灯的状态会产生连锁反应:和这个灯上下左右相邻的灯也要相应地改变其状态。我们用数字“1”表示一盏开着的灯,用数字“0”表示关着的灯。下面这种状态1011101101101111000011011在改变了最左上角的灯的状态后将变成:0111111101101111000011011再改变它正中间的灯后状态将变成:0111原创 2020-08-17 16:47:34 · 310 阅读 · 1 评论 -
洛谷题单【动态规划2】线性状态动态规划
导弹拦截题目描述某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。输入导弹依次飞来的高度(雷达给出的高度数据是≤50000的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。输入格式1行,若干个整数(个数≤100000)输出格式2行,每原创 2020-08-02 19:28:32 · 756 阅读 · 0 评论 -
洛谷题单 【动态规划1】动态规划的引入
题单简介动态规划是一种重要的思维方法,通过利用已有的子问题信息高效求出当前问题的最优解。疯狂的采药题目背景此题为纪念 LiYuxiang 而生。题目描述LiYuxiang 是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同种类的草药,采每一种都需要一些时间,每一种也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一.原创 2020-08-01 13:16:29 · 526 阅读 · 0 评论 -
洛谷题单 算法2-1 前缀和与差分
前缀和是一种重要的预处理,能大大降低查询的时间复杂度,而差分则是一种和前缀和相对的策略。【CSGRound2】光骓者的荣耀题目背景小 K 又在做白日梦了。他进入到他的幻想中,发现他打下了一片江山。题目描述小 K 打下的江山一共有n个城市,城市ii和城市i+1有一条双向高速公路连接,走这条路要耗费时间ai 。小 K 为了关心人民生活,决定定期进行走访。他每一次会从1号城市到n号城市并在经过的城市进行访问。其中终点必须为城市n。不仅如此,他还有一个传送器,传送半径为k,也就是可以传送到i−k.原创 2020-07-31 21:22:40 · 1054 阅读 · 0 评论 -
洛谷题单 算法1-7 搜索
kkksc03考前临时抱佛脚题目背景kkksc03 的大学生活非常的颓废,平时根本不学习。但是,临近期末考试,他必须要开始抱佛脚,以求不挂科。题目描述这次期末考试,kkksc03 需要考 4 科。因此要开始刷习题集,每科都有一个习题集,分别有 s1 ,s2,s3,s4道题目,完成每道题目需要一些时间,可能不等A1 ,A2 ,…,As1 ,B1,B2,…,Bs2,C1,C2 ,…,Cs3 ,D1 ,D2,…,Ds4 )。kkksc03 有一个能力,他的左右两个大脑可以同时计算 2道不同的题目,但是原创 2020-07-30 12:28:56 · 1006 阅读 · 0 评论 -
洛谷题单 算法1-6 二分查找与二分答案
题目背景一年一度的“跳石头”比赛又要开始了!题目描述这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石。组委会已经选择好了两块岩石作为比赛起点和终点。在起点和终点之间,有 N 块岩石(不含起点和终点的岩石)。在比赛过程中,选手们将从起点出发,每一步跳向相邻的岩石,直至到达终点。为了提高比赛难度,组委会计划移走一些岩石,使得选手们在比赛过程中的最短跳跃距离尽可能长。由于预算限制,组委会至多从起点和终点之间移走 MM 块岩石(不能移走起点和终点的岩石)。输入格式第一行包含三个整数L,N,M,原创 2020-07-29 21:38:32 · 1813 阅读 · 0 评论 -
洛谷题单 算法1-5 贪心
凌乱的yyy / 线段覆盖题目背景快 noip 了,yyy 很紧张!题目描述现在各大 oj 上有 n 个比赛,每个比赛的开始、结束的时间点是知道的。yyy 认为,参加越多的比赛,noip 就能考的越好(假的)。所以,他想知道他最多能参加几个比赛。由于 yyy 是蒟蒻,如果要参加一个比赛必须善始善终,而且不能同时参加 2 个及以上的比赛。输入格式第一行是一个整数 n ,接下来 n行每行是 2 个整数 ai,bi,表示比赛开始、结束的时间。输出格式一个整数最多参加的比赛数目。输入输出样例原创 2020-07-28 12:36:15 · 1530 阅读 · 0 评论 -
洛谷题单 算法1-4 递推与递归
1 栈题目背景栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表。栈有两种最重要的操作,即 pop(从栈顶弹出一个元素)和 push(将一个元素进栈)。栈的重要性不言自明,任何一门数据结构的课程都会介绍栈。宁宁同学在复习栈的基本概念时,想到了一个书上没有讲过的问题,而他自己无法给出答案,所以需要你的帮忙。题目描述宁宁考虑的是这样一个问题:一个操作数序列,1,2,…,n(图示为 1 到 3 的情况),栈 A 的深度大于 n。现在可以进行两种操作,将一个数,从操作数原创 2020-07-26 10:59:21 · 1353 阅读 · 0 评论 -
洛谷题单 算法1-3 暴力枚举
1 First Step (ファーストステップ)题目背景知らないことばかりなにもかもが(どうしたらいいの?)一切的一切 尽是充满了未知数(该如何是好)それでも期待で足が軽いよ(ジャンプだ!)但我仍因满怀期待而步伐轻盈(起跳吧!)温度差なんていつか消しちゃえってね冷若冰霜的态度 有朝一日将会消失得无影无踪元気だよ元気をだしていくよ拿出活力 打起精神向前迈进吧我们Aqours,要第一次举办演唱会啦!虽然学生会长看上去不怎么支持我们的样子,可是有了理事长的支持,我们还是被允许在校内的篮球场原创 2020-07-24 17:42:20 · 789 阅读 · 0 评论 -
洛谷题单 算法1-1 模拟和高精度
1 乒乓球题目背景国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及。其中1111分制改革引起了很大的争议,有一部分球员因为无法适应新规则只能选择退役。华华就是其中一位,他退役之后走上了乒乓球研究工作,意图弄明白1111分制和2121分制对选手的不同影响。在开展他的研究之前,他首先需要对他多年比赛的统计数据进行一些分析,所以需要你的帮忙。题目描述华华通过以下方式进行分析,首先将比赛每个球的胜负列成一张表,然后分别计算在1111分制和2121分制下,双方的比赛结果(原创 2020-07-23 08:44:12 · 1436 阅读 · 0 评论 -
查找算法 java
package com.算法.查找;import static java.util.Arrays.sort;public class 二分查找 { //二分查找要求数组有序 //代码分别找到数据的左边界和右边界 public static boolean flag ; public static void main(String[] args) { int[] array = new int[]{-2,0,0,1,9,8,0,-1,3,0};原创 2020-06-29 16:07:15 · 203 阅读 · 0 评论 -
八大经典排序算法(java)
package com.算法.排序;public class 冒泡排序 { // 时间复杂度 :O(n2); public static void main(String[] args){ int[] array = new int[100000]; for(int i=0;i<array.length;i++){ array[i] = (int)(Math.random()*200000); }原创 2020-06-26 12:23:17 · 223 阅读 · 0 评论 -
递归问题 java
package com.算法.递归;public class 迷宫 { public static boolean flag; public static int[][] look; //储存地图 public static boolean[][] book;//标记地图 public static int[][] next={{0,1},{1,0},{0,-1},{-1,0}}; public static void main(String[] args) {原创 2020-06-25 22:10:53 · 191 阅读 · 0 评论 -
队列优化的Bellman-Ford(贝尔曼-福特)算法
1:在处理单源最短路问题时,如果边出现负数的情况,而因为Dijkstra算法采用的是贪心的思想,所以无法处理负权值的情况。故采用此算法。2:为了减少时间复杂度,我们采用邻接表储存图,并且采用队列优化来减少不必要的循环。采用队列优化的理由:如果不进行优化那么外循环需要循环n-1次。而大多数情况下并不需要循环怎么多次。所以我们每次只对最短路估值发生变化的顶点的所有出边执行松弛操作。因为,只有此点的...原创 2020-03-18 23:48:16 · 381 阅读 · 0 评论 -
最短路径(弗洛伊德算法 迪杰斯特拉算法 贝尔曼-福特算法)
弗洛伊德算法:弗洛伊德算法核心代码:for(int k=0;k<n;k++){ for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]); } }} 上述代码只有五行,时间复杂度是N的三次方。本算法最大的优点就是代码简洁。...原创 2020-03-21 15:37:41 · 1225 阅读 · 0 评论 -
最大子段和 最长上升子序列 最长公共子序列 最长公共上升子序列 编辑距离(dp思路及例题)
最大子段和1(最大子段和)题目描述 :给出一段序列,选出其中连续且非空的一段使得这段和最大。输入格式:第一行是一个正整数N,表示了序列的长度。第二行包含N个绝对值不大于1e9的整数Ai,描述了这段序列。输出格式:一个整数,为最大的子段和是多少。思路:对于全部为负数的序列 ,我们只需输出一个最大值即可。对于不全为负数的序列 ,我们利用前缀和sum处理,每次更新一个最大值max...原创 2020-03-28 12:28:14 · 1400 阅读 · 2 评论 -
快速幂 、矩阵快速幂
快速幂如果要你自己写一个pow()函数,需要求2的2000000000次方,怎么求?int pow(int a,int b){ //普通乘 int ans = 1; for(int i=1; i<=b; i++) ans *= a; return ans;}上述代码的时间复杂度是o(n),当数据数量级很大的时候,这份代码的耗时会非常巨大...原创 2020-04-01 00:05:32 · 591 阅读 · 0 评论 -
基础背包问题
01背包1:01背包有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 件物品的体积和价值。输出...原创 2020-04-02 20:54:43 · 1125 阅读 · 0 评论