算法设计
一些算法
马踏飞燕&lin_li
博客地址以迁移:https://linli1724647576.github.io/
展开
-
NP完全理论的一些见解
NP完全理论1.P(polynominal)问题–多项式问题存在多项式时间算法的问题。2.NP(Nondeterministic Polynominal)问题–非确定多项式问题能在多项式时间内验证得出一个正确解的问题。关于P是否等于NP是一个存在了很久的问题,这里不做讨论。通俗的理解这两个问题的话:在借助计算机的前提下。P问题很容易求解;NP问题不容易求解,但对于某一答案我们可以很快验证这个答案是否正确。3.NPH(Nondeterminism Polynomial Hard)问题–NP难问题原创 2020-05-24 21:09:35 · 915 阅读 · 0 评论 -
算法实践:leetcode39 40组合总和
leetcode39 40组合总和描述39. 组合总和给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。示例 1:输入: candidates = [2,3,6,7], target = 7,所求解集为:[ [7], [2,2,3]]示例 2:输原创 2020-05-22 16:48:43 · 204 阅读 · 0 评论 -
装载问题 -- 分支限界法
装载问题 – 分支限界法装载问题描述分支限界法的搜索策略在当前节点(扩展节点)处,先生成其所有的儿子节点(分支),然后再从当前的活节点(当前节点的子节点)表中选择下一个扩展节点。为了有效地选择下一个扩展节点,加速搜索的进程,在每一个活节点处,计算一个函数值(限界),并根据函数值,从当前活节点表中选择一个最有利的节点作为扩展节点,使搜索朝着解空间上有最优解的分支推进,以便尽快地找出一个最优解。分支限界法解决了大量离散最优化的问题。选择方法1.队列式(FIFO)分支限界法队列式分支限界法将活节点原创 2020-05-14 09:39:54 · 3437 阅读 · 0 评论 -
算法实践:可达性统计
可达性统计描述给定一张N个点M条边的有向无环图,分别统计从每个点出发能够到达的点的数量。输入第一行两个整数N,M,接下来M行每行两个整数x,y,表示从x到y的一条有向边。输出输出共N行,表示每个点能够到达的点的数量。1≤N,M≤30000输入样例10 103 82 32 55 95 92 33 94 82 104 9输出样例1633211111题解参考https://www.acwing.com/solution/acwing/conte原创 2020-05-13 15:12:31 · 390 阅读 · 0 评论 -
算法实践:有向图的拓扑序列
有向图的拓扑序列描述问题转化为:给定一个n个点m条边的有向图,点的编号是1到n,图中可能存在重边和自环。请输出任意一个该有向图的拓扑序列,如果拓扑序列不存在,则输出-1。若一个由图中所有点构成的序列A满足:对于图中的每条边(x, y),x在A中都出现在y之前,则称A是该图的一个拓扑序列。数据范围:1≤n,m≤10^5输入第一行包含两个整数n和m接下来m行,每行包含两个整数x和y,表示存在一条从点x到点y的有向边(x, y)。输出共一行,如果存在拓扑序列,则输出拓扑序列。否则输出-1。原创 2020-05-13 14:52:58 · 1077 阅读 · 0 评论 -
算法实践:leetcode526 优美的排列
leetcode526 优美的排列描述假设有从 1 到 N 的 N 个整数,如果从这 N 个数字中成功构造出一个数组,使得数组的第 i 位 (1 <= i <= N) 满足如下两个条件中的一个,我们就称这个数组为一个优美的排列。条件:第 i 位的数字能被 i 整除i 能被第 i 位上的数字整除现在给定一个整数 N,请问可以构造多少个优美的排列?示例:输入: 2输出: 2解释: 第 1 个优美的排列是 [1, 2]: 第 1 个位置(i=1)上的数字是1,1能被 i(原创 2020-05-11 17:44:53 · 205 阅读 · 0 评论 -
算法实践:leetcode51、52 N皇后
leetcode51 52 N皇后题目n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。上图为 8 皇后问题的一种解法。给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。示例:输入: 4输出: [[".Q…", // 解法 1“…Q”,“Q…”,“…Q.”],["…Q.", // 解法 2“Q…”,“…Q”,“.原创 2020-05-11 17:03:08 · 148 阅读 · 0 评论 -
算法实践:leetcode210 课程表
leetcode 210 课程表描述现在你总共有 n 门课需要选,记为 0 到 n-1。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1]给定课程总量以及它们的先决条件,返回你为了学完所有课程所安排的学习顺序。可能会有多个正确的顺序,你只要返回一种就可以了。如果不可能完成所有课程,返回一个空数组。示例1输入:...原创 2020-05-08 15:38:08 · 181 阅读 · 0 评论 -
算法实践: leetcode207 课程表
leetcode207 课程表描述你这个学期必须选修 numCourse 门课程,记为 0 到 numCourse-1 。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们:[0,1]给定课程总量以及它们的先决条件,请你判断是否可能完成所有课程的学习?示例1输入: 2, [[1,0]] 输出: true解释: 总共有 2...原创 2020-05-08 15:25:44 · 281 阅读 · 0 评论 -
算法描述:最省赛程
最省赛程描述为了让自己能够驾驭大师摩托,打开了大师摩托的隐藏任务:“赛车试炼”。然而这个特殊的赛车试炼,竟然比的不是车速,比的是如何“省”油钱。林克需要驾驶不同邮箱容量各异的赛车,从起点城市S开到终点城市E。有N个城市(编号0、1…N-1)和M条赛道(构成一张无向图)。在每个城市里边都有一个加油站,不同的加油站的单位油价不一样(有些城市油价贵,有些城市油价便宜些)。请计算,如果林克驾...原创 2020-05-06 16:31:51 · 515 阅读 · 0 评论 -
用数组模拟链表实现邻接表的妙用
图例代码#include<bits/stdc++.h>using namespace std;//Head 与 next 数组存储的是ver数组的下标,0表示指向空//ver 数组存储的是每条边的终点//使用数组实现邻接表,无向图const int N = 1010; //顶点数const int M = 10100; //边数int head[N],Next...原创 2020-05-06 13:32:08 · 445 阅读 · 0 评论 -
算法实践:电路维修
电路维修描述每个格点都是电线的接点,每个格子都包含一个电子元件。电子元件的主要部分是一个可旋转的、连接一条对角线上的两个接点的短电缆。在旋转之后,它就可以连接另一条对角线的两个接点。电路板左上角的接点接入直流电源,右下角的接点接入飞行车的发动装置。林克发现因为某些元件的方向不小心发生了改变,电路板可能处于断路的状态。请问如何旋转最少数量的元件,使电源与发动装置重新连同在一起呢?注...原创 2020-04-30 14:40:07 · 465 阅读 · 0 评论 -
算法实践:滚石柱
滚石柱描述迷宫是一个N行M列的矩阵,每个位置可能是硬地(用”.”表示)、易碎地面(用”E”表示)、禁地(用”#”表示)、起点(用”X”表示)或终点(用”O”表示)。在每一步操作中,可以按上下左右四个键之一。按下按键之后,石柱向对应的方向沿着棱滚动90度。任意时刻,长方体不能有任何部位接触禁地,并且不能立在易碎地面上。字符”X”标识长方体的起始位置,地图上可能有一个”X”或者两个相邻...原创 2020-04-30 12:10:16 · 1920 阅读 · 0 评论 -
算法实践:公主的攻击范围
公主的攻击范围描述塞尔达公主瘦弱的身体里面蕴含着不可思议的神圣力量,这个力量从公主所在的位置释放,可以逐层扩散到加农污秽掌控的区域。给定一个N行M列的区域,代号为1的区域是公主能力释放的初始区,代号为0的区域表示需要洁净的区域。每经过1毫秒,公主的神圣之光向外扩散一格,洁净相邻区域(4个方向),请计算每个标记为0的区域中加农的势力最多还能得瑟几毫秒。格子与格子之间的距离使用曼哈顿距离计算...原创 2020-04-30 10:07:45 · 1115 阅读 · 0 评论 -
算法实践:leetcode45 跳跃游戏II
跳跃游戏II描述给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。样例输入: [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。 从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。难度中,贪心代码c...原创 2020-04-23 21:13:20 · 169 阅读 · 0 评论 -
算法实践:leetcode55 跳跃游戏
leetcode 55 跳跃游戏描述给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。样例输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。输入: [3,2,1,0,4]输出: false解释...原创 2020-04-23 19:30:53 · 195 阅读 · 0 评论 -
算法实践:滑块拼图
滑块拼图描述问题变为判定从初始局5 2 81 3 04 6 7变为目标局5 2 81 3 74 6 0是否有解的。0代表空格输入2个3×3的数字矩阵,一共6行。每行是3个数字。前三行代表初始局,后三行代表目标局。数字0代表X的位置输出如果有解输出possible否则输出impossible输入样例7 3 5 0 1 6 8 4 2 3 2 8 4 6...原创 2020-04-22 14:14:41 · 4279 阅读 · 0 评论 -
算法实践:加农的入侵
加农的入侵描述输入* 第一行: 四个由空格隔开的整数: X, Y, Mx, My* 第2到第Y+1行:每行包含一个由X个字符(".“表示干净区域,而”*"表示障碍物。)构成的字符串,共同描绘了草地的完整地图。(1≤X,Y≤100)输出输出一个整数,表示加农完全占领该区域所需要的天数。输入样例4 3 1 1......*..**.输出样例4难度中,BFS题解...原创 2020-04-22 13:24:12 · 1017 阅读 · 0 评论 -
算法实践:武士风度的牛
武士风度的牛描述这头神奇的牛像其它牛一样喜欢吃草,给你一张地图,上面标注了The Knight的开始位置,树、灌木、石头以及其它障碍的位置,除此之外还有一捆草。现在你的任务是,确定The Knight要想吃到草,至少需要跳多少次。The Knight的位置用’K’来标记,障碍的位置用’*’来标记,草的位置用’H’来标记。输入第一行: 两个数,表示棋盘的列数Column(<=150)...原创 2020-04-22 10:32:57 · 619 阅读 · 0 评论 -
算法实践:Bokoblin的巡逻范围
Bokoblin的巡逻范围描述有一个mm行和nn列的方阵区域,横纵坐标范围分别是0∼m−1和0∼n−1。一只红色的波克布林从坐标0,0的格子开始巡逻,每一次只能向左,右,上,下四个方向移动一格。但是不能进入行坐标和列坐标的数位之和大于k的格子。请问该红色波克布林能够达到多少个格子?假如输入:k=18, m=40, n=40则输出是:1484根据题意思:当k为18时,波克布林能够进入...原创 2020-04-22 09:20:17 · 1001 阅读 · 0 评论 -
算法实践:数独(3)
数独(3)描述为了寻回百年前与公主一起的记忆碎片,林克历尽千辛万苦总算破解了数独试炼I和II的谜题,寻回50%的记忆碎片。如今,摆在他面前是数独试炼III——传说中的靶形数独(通过后可以获得剩下的30%的记忆碎片)。靶形数独的方格同普通数独一样,在9×9的大九宫格中有9个3×3的小九宫格(用粗黑色线隔开的)。在这个大九宫格中,有一些数字是已知的,根据这些数字,利用逻辑推理,在其他的空格上...原创 2020-04-15 19:24:32 · 1056 阅读 · 0 评论 -
算法实践:数独(2)
数独(2)描述输入输入包含多组测试用例。每个测试用例占一行,包含81个字符,代表数独的81个格内数据(顺序总体由上到下,同行由左到右)。每个字符都是一个数字(1-9)或一个”.”(表示尚未填充)。您可以假设输入中的每个谜题都只有一个解决方案。文件结尾处为包含单词“end”的单行,表示输入结束。输出每个测试用例,输出一行数据,代表填充完全后的数独。输入样例.2738..1.....原创 2020-04-15 18:02:59 · 1345 阅读 · 0 评论 -
算法实践:数独(1)
数独(1)描述为了找到百年沉睡的原因,寻回百年前与公主一起的记忆碎片,明白自己是谁,林克必须破解数独谜题。林克需要在限定时间内,把9×9的数独补充完整,使得图中每行、每列、每个3 × 3的九宫格内数字1~9均恰好出现一次。林克需要寻回失去的记忆碎片,你,作为林克的朋友,需要帮忙林克寻回9×9棋盘中失去的数字。或许有一天,林克也能帮助你,寻回关于你是谁,你从哪里来的记忆碎片。这是数独试炼...原创 2020-04-15 17:05:59 · 1480 阅读 · 0 评论 -
算法实践:数独(0)
数独(0)描述输入输入的记忆碎片A是一个9行9列的数独矩阵。每行包含9个数字(均不超过数字为1-9)。初始矩阵A:530070000600195000098000060800060003400803001700020006060000280000419005000080079输出如果输入数据真的是初始矩阵A的解,输出Yes,否则输出No输入样例53467891...原创 2020-04-15 15:53:04 · 1054 阅读 · 1 评论 -
算法实践:Pell数列
Pell数列描述打表法是用空间换时间的好办法,对于庞大的敌人,采用查表的方法才能迅速置地人于死地。林克的任务,使用打表法解决如下问题:Pell数列a1, a2, a3, …的定义是这样的,a1= 1, a2= 2, … , an= 2 * a(n − 1)+ a(n - 2) (n > 2)。给出一个正整数k,要求Pell数列的第k项模上32767是多少。输入第1行是测试数据的...原创 2020-04-15 09:39:20 · 1319 阅读 · 1 评论 -
算法实践:二进制中最低位的位置
二进制中最低位的位置描述给定一个16位的十进制数,请把该数转换为二进制数来看待。请找到该数看为二进制后,其最低位的1出现的位置。也就是这个数最低位的1是二进制中的第几位呢?输入以1开头的二进制数的十进制表示B.例如输入9.输出输出K,表示B中的1在第K位(K=0,1,2…15)9的最低位的1出现在位置0.样例90难度中,lowbit的用法解法先用打表法计算lo...原创 2020-04-15 09:27:09 · 2942 阅读 · 1 评论 -
算法实践:二进制中1的个数(lowbit)
二进制中1的个数(lowbit料理)描述请用lowbit解决如下问题:输入一个32位整数,输出该数二进制表示中1的个数。注意:负数在计算机中用其绝对值的补码来表示。输入输入:9输出:2解释:9的二进制表示是1001,一共有2个1。输出输入:-2输出:31解释:-2在计算机里会被表示成11111111111111111111111111111110, 一共...原创 2020-04-15 09:23:12 · 994 阅读 · 0 评论 -
算法实践:棋盘遍历问题
骑士棋盘遍历描述如下图分别是(p,q)为(3,9) , (6,3) ,以及(5,5)的棋盘空间。请问对于每一种棋盘(p,q),请问2D骑士是否有一种一次遍历所有棋盘方格的路线?如果有,请输出这条路线(若有多条路线,请输出字典序最小的路线)。如果没有,请输出无。输入输入数据第一行为正整数n,代表有多少组输入样例接下来n行是两个整数代表行p和列q, 代表变形棋盘的行列参数,其中(1 ...原创 2020-04-09 15:37:35 · 1811 阅读 · 0 评论 -
算法实践:净化迷雾森林(改编自红与黑)
净化迷雾森林(改编自红与黑)描述迷雾森林被加农的玷污了,原本圣洁无比的迷雾森林,如今被彻底玷污,空气中充满着紫色的恶臭。林克临危不惧,带上呼吸面罩,挥舞大师之剑的光芒,净化迷雾。林克所到之处,加农褪去,圣洁回归。如下图,红色代表墙壁,紫色的迷雾代表需要净化的空间,金色代表林克开始净化的起点。从某处开始,林克只能向相邻的紫色区域移动。请问,林克总共能够净化多少区域?输入输出对每个...原创 2020-04-09 12:10:58 · 836 阅读 · 0 评论 -
算法实践:生日蛋糕
生日蛋糕描述7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体。设从下往上数第i(1 <= i <= M)层蛋糕是半径为Ri, 高度为Hi的圆柱。当i < M时,要求Ri > Ri+1且Hi > Hi+1。由于要在蛋糕上抹奶油,为尽可能节约经费,我们希望蛋糕外表面(最下一层的下底面除外)的面积Q最小。令Q =...原创 2020-04-09 10:06:17 · 2329 阅读 · 0 评论 -
算法实践:leetcode123 买股票的最佳时机
买股票的最佳时机描述给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。样例输入: [3,3,5,0,0,3,1,4]输出: 6解释: 在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交...原创 2020-04-07 23:37:26 · 150 阅读 · 0 评论 -
算法实践:leetcode5 最长回文子串
leetcode5: 最长回文子串描述给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。样例输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。难度中,动态规划解法代码class Solution { public String longestPalindrome(String s) { ...原创 2020-04-04 14:38:04 · 190 阅读 · 0 评论 -
算法实践:最短飞行距离
最短飞行距离描述加农肆虐海拉鲁大陆,地面全被毒化了,寸步难行,唯有飞行。林克透过雷达获得所有塔之间距离以及塔的高度。只有从第N座塔——平原之塔上才可以给予加农致命一击。已知N座塔(1…N),塔与塔之间只有唯一的一条飞行路线,从塔A到塔B,需要消耗不同的精力药水(飞行以及爬塔都需要)。假设原始塔s与目标塔d之间的距离是length,需要消耗的精力药水是cost。则每一条路线就可以表示为如下...原创 2020-04-03 20:37:08 · 610 阅读 · 1 评论 -
算法实践:城堡问题(DFS)
城堡问题描述 1 2 3 4 5 6 7 ############################# 1 # | # | # | | # #####---#####---#---#####---# 2 # # | # # # # # #---#####---#####---####...原创 2020-04-01 16:07:03 · 1314 阅读 · 0 评论 -
算法实践:踩方格
踩方格描述每一个人心中都有一个林克。每一个林克都不一样。在命运矩阵里面,随着选择的不同,没有哪一个林克的命运会一模一样。有一个方格型的命运矩阵,矩阵边界在无穷远处。我们做如下假设:\1. 每一个格子象征林克命运中的一次抉择,每次只能从相邻的方格中做选择。\2. 从某个格子出发,只能从当前方格移动一格,走到某个相邻的方格上;3.选择一旦做出就不可更改,因此走过的格子无法走第二次。\4....原创 2020-04-01 09:43:25 · 542 阅读 · 0 评论 -
算法实践:雷达安装(洛谷p1325)
雷达安装描述描述:假设海岸线是一条无限延伸的直线。它的一侧是陆地,另一侧是海洋。每一座小岛是在海面上的一个点。雷达必须安装在陆地上(包括海岸线),并且每个雷达都有相同的扫描范围d。你的任务是建立尽量少的雷达站,使所有小岛都在扫描范围之内。数据使用笛卡尔坐标系,定义海岸线为x轴。在x轴上方为海洋,下方为陆地。样例1如图所示输入第一行包括2个整数n和d,n是岛屿数目,d是雷达扫描范围。...原创 2020-03-30 23:00:28 · 892 阅读 · 0 评论 -
算法实践:导弹拦截
导弹拦截1描述某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭,并观测到导弹依次飞来的高度,请计算这套系统最多能拦截多少导弹。拦截来袭导弹时,必须按来袭导弹袭击的时间顺序,不允许先拦截后面的导弹,再拦截前面的导弹。输入输入有两行,第一行,莱尼尔...原创 2020-03-26 19:55:53 · 726 阅读 · 0 评论 -
算法实践:01背包
01背包描述有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。输入第一行两个整数,N,V用空格隔开,分别表示物品数量和背包容积。接下来又N行,每行两个整数vi,wi,用空格隔开,分别表示第i件物品的体积和价值输出输出一个整数,表示最大价值。样例4 51 22 43 44 58难度中,动态规划解法...原创 2020-03-26 19:26:31 · 417 阅读 · 0 评论 -
算法实践:滑雪
滑雪描述Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长底滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子 1 2 3 4 516 17 18 19 615 24 25 20 714 23 22 21 8...原创 2020-03-26 17:59:02 · 503 阅读 · 0 评论 -
算法实践:林克的背包 (动态规划)
林克的背包描述林克拥有一个可扩容的背包,前提是需要有足够的克罗克果实。林克当前背包的总容积是70。假设在道具商店里有n种道具,假设每个道具的体积分别是a1,a2……an。请问,要塞满林克的背包一共有多少种不同方法呢?输入输入的第一行是正整数n (1 <= n <= 50),表示不同的道具的数目。接下来的n行,每行有一个1到70之间的正整数,表示不同道具的体积值a1,a2...原创 2020-03-24 19:29:00 · 877 阅读 · 0 评论