自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 【JAVA】求数列中相邻两数间不存在比两数大的情况数(Pro20211203)(IndexTree / DP)

【JAVA】求数列中相邻两数间不存在比两数大的情况数(Pro20211203)(IndexTree / DP)题目解题思路代码(IndexTree)代码(DP) 题目 身高各异的 N 个人按一定间隔站成一排,每个人都按照以下规则来监控他们能看到的人是否在做其他的事。 规则:我和我要监控到的第 i 个人之间不能有人比我高, 也不能有人比第 i 个人高。例如,根据下 [图] 可知,⑤ 号可以监控到 ③ 号, 但无法监控到 ① 号,因为 ③ 号比 ⑤ 号高。 假设如上 [图] 所示,一共站着八个人。从左向右

2021-12-23 12:14:27 321

原创 【JAVA】求拓扑排序可能在第二个位置的点个数(Pro20210924)(拓扑排序)

【JAVA】求拓扑排序可能在第二个位置的点个数(Pro20210924)(拓扑排序)题目思路代码 题目 N个人在举行一对一比拼的比赛。每个人的实力都是确定的,互不相同且不会改变。比赛的胜负总是由实力决定。因为是没有进行完所有比赛的状态,还无法准确看出谁是第一名,谁是第二名。 比如,假设知道下面一部分比赛的结果。参赛人员从1到N编号,箭头出发点上的人输给了箭头终点上的人。(胜←败) [图1] [图1]中可能成为第一的人有2,3,5,8这4名。因为第一名还没有确定,所以4个人都有可能成为第二名。如果有人只输给

2021-09-29 10:20:37 192

原创 【JAVA】求固定曼哈顿距离范围内的匹配情况数(Pro20210917)(二分 / Index Tree)

【JAVA】求固定曼哈顿距离范围内的匹配情况数(Pro20210917)(二分 / Index Tree)題目思路代码(二分)代码(Index Tree) 題目 在一个二维平面的 X 轴上有 N 个店铺,有 M 个房屋分别散落在平面的任意位置上。可送货范围 D 是固定的,所以如果店铺与房屋之间的距离小于 D,就可以送货。距离是根据店铺与房屋在 X 轴坐标上差值的绝对值和在 Y 轴坐标上差值的绝对值之和来决定。如下图所示,字母(A、B、C)表示房屋的位置,数字(1 到 4)表示店铺的位置。图中的菱形覆盖区域是

2021-09-23 11:06:45 449 1

原创 Index Tree特点及适用范围

Index Tree特点及适用范围特点:适用范围: 个人总结,仅供参考! 特点: 空间复杂度:[2N, 4N] 时间复杂度: Update:logN(单点更新) Query:2logN(一次区间查询) Index Tree是完美二叉树; Index Tree一定存在空间浪费(至少Tree[0]未使用); Index Tree的使用,仅仅是为了提升效率: 只使用Index Tree的叶节点,就可以解决问题,但效率较低; 一次区间查询:O(N) --> O(logN)(效率提升了); 一次更新:O

2021-09-16 14:07:28 634

原创 拓扑排序特点及适用范围

拓扑排序特点及适用范围特点适用范围: 特点 拓扑排序是针对有向图的; 做拓扑排序的图不一定是连通图,可能有多个连通分量; 拓扑排序是一个动作,而不是结果; 一个图的拓扑排序结果不存在,则该图存在环; 一个图的拓扑排序结果存在,则: 5.1. 图的拓扑排序结果可能有多个,但按字典排序的结果是唯一的; 5.2. 至少有一个入度是0的点; 5.3. 至少有一个出度是0的点; 对于一个图的拓扑排序结果,如果新加上的边,是从前面的点指向后面的点,则新图仍然是无环图。 适用范围: 可判断有向图是否有环(拓扑排序结

2021-09-16 13:50:42 2165

原创 【JAVA】有向无环图到达固定点的最大深度及分值(Pro20210910)(拓扑排序)

【JAVA】有向无环图到达固定点的最大深度及分值(Pro20210910)(拓扑排序)题目思路代码 题目 密码:6667 竞赛 (测试用例总数:40 个,1 秒 (C/C++),1.5 秒 (JAVA)/内存要求:256 M,堆栈 1 M) 智宇决定参加在某星球举办的竞赛。整个竞赛场地共有 N 个关卡,分别从 1 到 N 进行编号,通过连接两个关卡的 M 条单行道连通这 N 个关卡。每个关卡只能经过一次,关卡 1 始终为终点。 在这场竞赛中,智宇可以任意选择在哪个关卡出发,然后在到达终点前,获取尽量多的积

2021-09-13 15:58:23 449

原创 【JAVA】无向连通图到达所有点必须经过固定点成本之和的最小值(Pro20210903)(Dijkstra + DP)

【JAVA】无向连通图到达所有点必须经过固定点成本之和的最小值(Pro20210903)(Dijkstra + DP)题目思路代码 题目 略 思路 每次到达下一个点必须经过1号店,可以拆解为从当前点到1号点的最短路径,加上从1号点到目的地的最短路径。 也就是说,整个过程可以分解为: 1号点到剩余所有点:在下面会包含,不用单独列举(计算) 2号点到剩余所有点:【2 --> 1 --> 3 --> 1 --> 4 --> 1 --> 5… --> N-1 -->

2021-09-08 10:48:55 264

原创 【JAVA】最大间隔限定的最大和(Pro20210827)(DP(IndexTree / PriorityQueue)

【JAVA】最大间隔限定的最大和(Pro20210827)(DP(IndexTree / PriorityQueue)题目思路代码(IndexTree)代码(PriorityQueue) 题目 Lia 在一个景点看到了由 N 个垫脚石组成的石桥。单纯地走过这些垫脚石感觉没有意思,所以她给每块垫脚石设置了一个分数,将踩到的所有石头上的分数全部加起来,想要得到一个最大分数。 但是,为了让这件事更有意思,她决定按下列规则来过桥。 第一块和最后一块垫脚石必须要踩。 设定一个K值,下一块踩的石头与上一块踩的石头间相

2021-08-31 16:06:08 174

原创 【JAVA】连通图到达所有点的最小成本(Pro20210820)(Floyd + DFS)

【JAVA】连通图到达所有点的最小成本(Pro20210820)(Floyd + DFS)题目思路代码 题目 在 S 村,有 N 座房屋,通过 M 条道路连通,N 座房屋中的其中两个是餐厅。村民都在自己家里从餐厅订外卖,但全村只有一个外卖员,他要找出最快捷的外卖路径。 如上 [图] 所示,蓝色的点代表居民房屋,橙色的点代表餐厅,绿色的点代表外卖员位置,直线边上的数字代表道路的长度。假设村民们在餐厅下单订购的外卖如上表所示。外卖员从 8 号屋出发 → 到 6 号餐厅取 4 号和 5 号屋的餐 → 送餐到 4

2021-08-31 08:53:09 831

原创 【JAVA】求有两次调整权值机会的最短路径(Pro20210813)(BFS(Dijkstra思想))

【JAVA】求有两次调整权值机会的最短路径(Pro20210813)(BFS(Dijkstra思想))題目:思路:代码: 題目: 假设有个国家有 N 座城市,通过 M 条道路连通,城市从 1 到 N 进行编号,每条道路上都会收取过路费。 据说,这个国家每年的暑期会向全体市民发放两张过路费折扣券(每张券的折扣力度可能会不同)。John 住在 1 号城市,准备前往 N 号城市度假,想要使用折扣券确保支付最少的过路费。 如上 [图] 所示,假设从 1 号城市出发,前往 8 号城市,收到的折扣券金额分别是 2 和

2021-08-27 15:19:31 179

原创 【JAVA】连续区间最大和(Pro20210806)(DP)

【JAVA】连续区间最大和(Pro20210806)(DP)题目思路代码 题目 假设 A[1…N] 是包含 N 个整数的数组。对数组发出 Q 个请求,每个请求都是一个索引对 (i, j),(每个请求都满足 i ≤ j)。对每个请求的回复是数组 A[1…N] 中除了 i 到 j 的区段之外的最大部分和(数组的连续子数组中和最大的值)。最大子数组至少要包含一个元素。 最大子数组的和是存在于 i 元素左边或者 j 元素右边的元素之和。 各个请求是独立的。也就是说,在一个请求中排除的区段不会影响到后续的请求。 以如

2021-08-19 14:51:01 397

原创 【JAVA】两数组的元素差值小于K的情况数(Pro20210803)(二分查找 / 双指针)

【JAVA】两数组的元素差值小于K的情况数(Pro20210803)(二分查找 / 双指针)题目思路:代码(二分查找):代码(双指针): 题目 A 国与 B 国每年都会举办一场友谊赛。该友谊赛在两国之间已举办多年,比赛规则如下: 比赛中,两国各派出 N 名参赛者,各国参赛者站成一排,面对面站立。然后,两国各派出站位相连的 K 名参赛者组成代表选手,作为一组进行比拼。比拼后,两国各自的 K 名选手返回初始位置,重新派出站位相连的 K 名选手组成队伍,进行多次比赛。注意,相同选手的组合仅能比拼一次。换句话说,如

2021-08-18 16:59:29 674

原创 【JAVA】Stars(POJ 2352)(IndexTree)

这里写自定义目录标题思路:代码(IndexTree):代码(BIT): 题目地址:http://poj.org/problem?id=2481 思路: 题目要求的是每个等级的星星有几颗,那就需要先求出每颗行星的等级。 根据题目内容,每颗星星的等级,是X坐标和Y坐标均小于等于自身坐标的星星数量。 每颗星星的等级都需要算,那就存在计算先后的问题。 那么,对于某一颗星,只要确保在计算它的等级的时候,已经计算的星星都不在这颗行星右侧(已经计算的星星的X坐标都小于等于当前星星的X坐标),那就只需要看在这些星星中,有多

2021-08-04 16:05:57 233

原创 【JAVA】Cows(POJ 2481)(IndexTree)

【JAVA】Cows(POJ 2481)(IndexTree)思路:代码: 题目地址:http://poj.org/problem?id=2481 思路: 能量比当前牛大的牛,则吃草区间是大于当前牛的。 即:起始坐标小于等于当前牛的起始坐标且结束坐标大于等于当前牛的结束下标的牛的数量,减去和当前牛的吃草区间完全相等的牛的数量即可。 首先,要确保起始坐标小于等于当前牛的,则根据起始下标升序排序,就可以确保在处理当前牛时,已经被处理的牛的起始下标小于等于当前牛的起始下标。 其次,在已经被处理的牛中,寻找结束下标

2021-08-04 12:39:49 196

原创 【JAVA】每类各选一个后求最大最小值差值的最小值(Pro20210802)(优先级队列 / IndexTree)

【JAVA】每类各选一个后求最大最小值差值得最小值(Pro20210802)(优先级队列 / IndexTree题目:思路:代码(优先级队列):代码(IndexTree): 题目: Lin 打算在自己住的村子里建 N 个不同的便利设施。每个便利设施有 K 种建造方法,设施的便利性因建造方法而异。因此,Lin 尝试从 K 种方法中各选择一种来建造这 N 个便利设施。 当 N 个便利设施中便利性最高和最低的差值越小,便利设施越便于使用。Lin 希望算出最小的差值。 假设便利设施数量 N 为 3,各设施的建造方

2021-08-03 17:38:11 392

原创 【JAVA】连通分量中的背包问题(Pro20210712)(BFS + DP)

【JAVA】连通分量中的背包问题(Pro20210712)(BFS + DP)题目思路代码 题目 S 公司的网络管理员琳收到了一通紧急来电。来电告知公司内部设备连接的网络中发现了恶意代码,必须马上采取相应措施。 S 公司有 N 台设备,通过 M 根线路连接,所以如果其中一台设备感染恶意代码,其他设备也会通过连接网络感染上恶意代码。目前,已有 K 台设备感染恶意代码,代码扩散危机迫在眉睫。受感染的设备需要立即处理,但在目前的情况下,最多只能处理三台设备。 保受感染的设备数量尽可能少的情况下,帮助琳确定要处理的

2021-08-03 11:40:42 176

原创 【Java】求连通图中的K个连通分量权值之和的最小值Pro20210720(最小生成树(MST) / 克鲁斯卡尔 Kruskal)

【Java】求连通图中的K个连通分量权值之和的最小值Pro20210720(克鲁斯卡尔 Kruskal)题目思路代码(调整前):优化后(求MST时,求出(N - 1 - K + 1)条边即可):代码(优化后): 题目 琳恩正在计划前往S国进行K次旅行。 S国有N座城市,城市之间通过M条道路连接着。琳恩可从任意一座城市前往另一座城市,移动时,每条道路均会产生通行费,所以她需要支付费用。 琳恩计划在K次旅行期间,通过利用最少的道路来访问N座城市,而每座城市至少需要访问一次。如果按照如上的方式旅行时,存在多种方案

2021-08-02 14:49:41 441

原创 【JAVA】求飞机游戏中最小横向移动次数Pro20210719(DP / BFS(Dijkstra思想))

题目 整个游戏地图由M个横向格子和N个纵向格子组成,地图上的格子有可能是空的,也可能有障碍物,我们需要在这个地图中进行滚动游戏。你能看到的游戏屏幕的横向和纵向大小都是M个格子。地图中,从顶部开始的M行不存在障碍物。 游戏开始时,在屏幕上可以看到整个地图中最底部的M个纵向和横向格子,你的飞船位于屏幕左下方(即整个地图的左下方格子)的格子。 你的飞船将一直位于游戏屏幕的末行,游戏中的每一步,地图都会向下滚动一行。换句话说,每进行一步,游戏屏幕中显示的地图都会向上移动一行。由于飞船一直位于屏幕末行,所以它在整个地

2021-07-28 13:51:02 239

原创 【JAVA】求可汇合后同行的两人到达固定终点的最小成本Pro20210622(最短路径 迪杰斯特拉(Dijkstra))

题目 当前有一个N行M列网格模型的国家。每个单元格代表着一座城市。每次通过一座城市时,都会产生一笔通行费。 今年夏天将在这个国家的某座城市举办一个盛大的庆典活动。约翰和克洛伊为了参加这个庆典,他们需要各自从自己居住的城市出发,前往到举办庆典活动的城市。前往时,可以移动到上下左右相邻的城市,一旦离开一座城市,就需要立即支付通行费。此外,由于通行费是按团体收费而不是按人数收费,因此在移动的途中,在某一座城市碰面,然后一同出行要比单独出行花费的更少。 如上图所示,假设约翰居住在[2,2],克洛伊居住在[2,5]

2021-07-26 16:40:59 331

原创 【JAVA】逆序对(POJ 2299)(IndexTree)

【JAVA】逆序对(POJ 2299)思路:代码 题目地址:http://poj.org/problem?id=2299 思路: IndexTree的叶节点和数字按顺序一一对应; 假设先排小的数字,确认每个数字移动的时候,左侧有K个比自己大的,则自己就要移动K次; 每个数字移动后,则这个数字的位置已经不存在,更新为0; SUM(K1, K2, …, Kn)即为所求。 代码 import java.io.IOException; import java.util.Arrays; import java.uti

2021-07-22 15:11:05 161

原创 【JAVA】有关系数对中两侧均递增的最大对数Pro20210628 (最长递增子序列(LIS) / IndexTree / DP + 二分)

【JAVA】有关系数对中两侧均递增的最大对数Pro20210628 题目 哲珉常去的健身房进了一种新的健身器材。该器材是以两柱子竖立的形态,每个柱子上有N+1个把手,各把手都以从下到上的方向贴着0到N的编号。 使用该器材进行锻炼时,需要用左手握住左侧柱子的0号把手,用右手握住右侧柱子的0号把手。然后,将双手向上移动到更高的把手来持续进行锻炼。 该器材附有一张表,表上以成对的形式写着多个左右把手的编号。锻炼者只能同时握住表上写着的一对把手编号。即,若表上有(3, 4),那么可以同时握住左侧3号把手和右侧4号把

2021-07-21 16:12:51 222 1

原创 【JAVA】求数组前K个数中固定位置元素之和Pro20210524 (优先级队列 / IndexTree)

【JAVA】求数组前K个数中固定位置元素之和Pro20210524题目方法一:优先级队列方法二:IndexTree 题目 用户用餐后会在外卖应用上对食物的满意度进行评价。(满意度分数始终大于0) 研究满意度的专家称,当把满意度分数按照从小到大的顺序排列时,某个(X/Y)位置的满意度非常重要。因此作为管理满意度的负责人丽雅,她想逐个接收分数后进行处理。 每当接收的满意度为Y的倍数时,会调查X/Y位置的满意度并进行记录。(如果X=3,Y=4的情况,满意度有4个时取第三个分数,有八个时取第六个分数。) 然而,有时

2021-07-21 11:12:01 241

原创 【JAVA】POJ 1995 Raising Modulo Numbers (快速冪)

【Java】POJ 1995 Raising Modulo Numbers 快速冪思路 思路 水题,每项用快速幂求解即可。 // An highlighted block import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { static int Z, M, H, B; static long ASW, TMP_ASW

2021-07-20 13:38:49 160

原创 【JAVA】求数组连续区间内最大值与最小值的差不大于K的最大区间长度 Pro20210705 (双指针+优先级队列 / 双指针+IndexTree)

求数组连续区间内最大值与最小值的差不大于K的最大区间长度 Pro20210705题目方法一:双指针+优先级队列方法二:双指针+IndexTree 题目 给定数组,求在数组的连续区间内最大值与最小值的差不大于K的最大区间长度。 输入: 测试用例数量T 第1个测试用例数组长度N 差值K 第1个测试用例数组 第2个测试用例数组长度N 差值K 第2个测试用例数组 … 方法一:双指针+优先级队列 思路: 既然是连续区间,那么在下标left和下标right区间内,元素都是计算范围内的,所以用双指针指定连续区

2021-07-14 15:23:00 1348 1

原创 【JAVA】最长递增子序列(LIS)的不同解法(POJ 2533)(DP / IndexTree)

【JAVA】LIS的不同解法(POJ 2533)(待完善)方法1:DP(贪心 + 二分)方法2:IndexTree(原始数据的下标和Tree叶节点下标对应)方法3:IndexTree(原始数据的值和Tree叶节点下标对应)方法4:BIT(原始数据的值和Tree叶节点下标对应) 题目地址:http://poj.org/problem?id=2533 方法1:DP(贪心 + 二分) 思路: 原始数组DATA[],用于存放原始数据。 临时数组ARR[],用于存放局部最优解(注意:ARR数组中的元素,并不一定是原始

2021-07-06 16:38:30 310

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除