算法
文章平均质量分 51
SRestia
心态,决定人生
展开
-
C++---树形DP---树的中心(每日一道算法2023.7.19)
给定一棵树,树中包含 n 个结点(编号1~n)和 n−1 条无向边,每条边都有一个权值。请你在树中找到一个点,使得该点到树中其他结点的最远距离最近。原创 2023-07-19 11:49:56 · 458 阅读 · 0 评论 -
C++---树形DP---树的最长路径(每日一道算法2023.5.4)
给定一棵树,树中包含 n 个结点(编号1~n)和 n−1 条无向边,每条边都有一个权值。现在请你找到树中的一条最长路径。换句话说,要找到一条路径,使得使得路径两端的点的距离最远。注意:路径中可以只包含一个点。原创 2023-05-04 18:39:48 · 846 阅读 · 1 评论 -
C++---区间DP---棋盘分割(每日一道算法2023.5.2)
将一个 8×8 的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的部分继续如此分割,这样割了 (n−1) 次后,连同最后剩下的矩形棋盘共有 n 块矩形棋盘。(每次切割都只能沿着棋盘格子的边进行)原创 2023-05-02 17:24:43 · 769 阅读 · 0 评论 -
C++---区间DP---加分二叉树(每日一道算法2023.4.28)
设一个 n 个节点的二叉树 tree 的中序遍历为(1,2,3,…,n),其中数字 1,2,3,…,n 为节点编号。每个节点都有一个分数(均为正整数),记第 i 个节点的分数为 di,tree 及它的每个子树都有一个加分,任一棵子树 subtree(也包含 tree 本身)的加分计算方法如下: subtree的左子树的加分 × subtree的右子树的加分 + subtree的根的分数 若某个子树为空,规定其加分为 1。叶子的加分就是叶节点本身的分数,不考虑它的空子树。试求一棵符合中序原创 2023-04-28 16:32:18 · 954 阅读 · 0 评论 -
C++---区间DP/高精度计算---凸多边形的划分(每日一道算法2023.4.27)
给定一个具有 N 个顶点的凸多边形,将顶点从 1 至 N 标号,每个顶点的权值都是一个正整数。将这个凸多边形划分成 N−2 个互不相交的三角形,对于每个三角形,其三个顶点的权值相乘都可得到一个权值乘积,试求所有三角形的顶点权值乘积之和至少为多少。原创 2023-04-27 19:34:51 · 689 阅读 · 0 评论 -
C++---区间DP---能量项链(每日一道算法2023.4.26)
在 Mars 星球上,每个 Mars 人都随身佩带着一串能量项链,在项链上有 N 颗能量珠。能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数。并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定等于后一颗珠子的头标记。因为只有这样,通过吸盘(吸盘是 Mars 人吸收能量的一种器官)的作用,这两颗珠子才能聚合成一颗珠子,同时释放出可以被吸盘吸收的能量。如果前一颗能量珠的头标记为 m,尾标记为 r,后一颗能量珠的头标记为 r,尾标记为 n,则聚合后释放的能量为 m×r×n(Mars 单位),新原创 2023-04-26 16:39:34 · 753 阅读 · 0 评论 -
C++---区间DP---环形石子合并(每日一道算法2023.4.24)
将 n 堆石子绕圆形操场排放,现要将石子有序地合并成一堆。规定每次只能选相邻的两堆合并成新的一堆,并将新的一堆的石子数记做该次合并的得分。请编写一个程序,读入堆数 n 及每堆的石子数,并进行如下计算: - 选择一种合并石子的方案,使得做 n−1 次合并得分总和最大。 - 选择一种合并石子的方案,使得做 n−1 次合并得分总和最小。原创 2023-04-24 11:12:21 · 398 阅读 · 0 评论 -
C++---状态压缩dp---愤怒的小鸟(每日一道算法2023.4.19)
Kiana 最近沉迷于一款神奇的游戏无法自拔。 简单来说,这款游戏是在一个平面上进行的。 有一架弹弓位于 (0,0) 处,每次 Kiana 可以用它向第一象限发射一只红色的小鸟, 小鸟们的飞行轨迹均为形如 y=ax2+bx 的曲线,其中 a,b 是 Kiana 指定的参数,且必须满足 a原创 2023-04-19 22:31:25 · 467 阅读 · 0 评论 -
C++---状态压缩dp---炮兵阵地(每日一道算法2023.4.17)
司令部的将军们打算在 N×M 的网格地图上部署他们的炮兵部队。一个 N×M 的地图由 N 行 M 列组成,地图的每一格可能是山地(用 `H` 表示),也可能是平原(用 `P` 表示),如下图。在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一支炮兵部队在地图上的攻击范围如图中黑色区域所示:如果在地图中的灰色所标识的平原上部原创 2023-04-17 20:57:58 · 701 阅读 · 0 评论 -
C++---状态压缩dp---玉米田(每日一道算法2023.4.16)
农夫约翰的土地由 M×N 个小方格组成,现在他要在土地里种植玉米。非常遗憾,部分土地是不育的,无法种植。而且,相邻的土地不能同时种植玉米,也就是说种植玉米的所有方格之间都不会有公共边缘。现在给定土地的大小,请你求出共有多少种种植方法。土地上什么都不种也算一种方法。原创 2023-04-16 18:11:51 · 528 阅读 · 0 评论 -
C++---状态压缩dp---小国王(每日一道算法2023.4.15)
在 n×n 的棋盘上放 k 个国王,国王可攻击相邻的 8 个格子,求使它们无法互相攻击的方案总数。原创 2023-04-15 18:48:45 · 753 阅读 · 0 评论 -
C++---状态机模型---设计密码 (每日一道算法2023.4.14)
你现在需要设计一个密码 S,S 需要满足: - S 的长度是 N; - S 只包含小写英文字母; - S 不包含子串 T;例如:abc 和 abcde 是 abcde 的子串,abd 不是 abcde 的子串。请问共有多少种不同的密码满足要求?由于答案会非常大,请输出答案模 109+7 的余数。原创 2023-04-14 17:33:43 · 442 阅读 · 0 评论 -
C++---状态机模型---股票买卖 V(每日一道算法2023.4.13)
给定一个长度为 N 的数组,数组中的第 i 个数字表示一个给定股票在第 i 天的价格。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖股票): - 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 - 卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。原创 2023-04-13 15:52:44 · 305 阅读 · 0 评论 -
C++---状态机模型---股票买卖 IV(每日一道算法2023.4.12)
给定一个长度为 N 的数组,数组中的第 i 个数字表示一个给定股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润,你最多可以完成 k 笔交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。一次买入卖出合为一笔交易。原创 2023-04-12 17:00:59 · 352 阅读 · 0 评论 -
C++---状态机模型---大盗阿福(每日一道算法2023.4.11)
阿福是一名经验丰富的大盗。趁着月黑风高,阿福打算今晚洗劫一条街上的店铺。这条街上一共有 N 家店铺,每家店中都有一些现金。阿福事先调查得知,只有当他同时洗劫了两家相邻的店铺时,街上的报警系统才会启动,然后警察就会蜂拥而至。作为一向谨慎作案的大盗,阿福不愿意冒着被警察追捕的风险行窃。他想知道,在不惊动警察的情况下,他今晚最多可以得到多少现金?原创 2023-04-11 13:29:38 · 490 阅读 · 1 评论 -
C++---背包模型/贪心---能量石(每日一道算法2023.4.10)
岩石怪物杜达生活在魔法森林中,他在午餐时收集了 N块能量石准备开吃。由于他的嘴很小,所以一次只能吃一块能量石。能量石很硬,吃完需要花不少时间。吃完第 i 块能量石需要花费的时间为 Si秒。杜达靠吃能量石来获取能量。不同的能量石包含的能量可能不同。此外,能量石会随着时间流逝逐渐失去能量。第 i 块能量石最初包含 Ei 单位的能量,并且每秒将失去 Li 单位的能量。当杜达开始吃一块能量石时,他就会立即获得该能量石所含的全部能量(无论实际吃完该石头需要多少时间)。能量石中包含的能量最多降低至原创 2023-04-10 17:07:15 · 390 阅读 · 0 评论 -
C++---快速选择(每日一道算法2023.4.8)
给一个未排序的序列,序列中不包含重复元素,要求找到第k大的元素并输出。原创 2023-04-08 15:04:22 · 438 阅读 · 0 评论 -
C++---背包模型---背包问题求方案数(每日一道算法2023.3.26)
有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出 **最优选法的方案数**。注意答案可能很大,请输出答案模 109+7 的结果。原创 2023-03-26 12:53:27 · 562 阅读 · 0 评论 -
C++---背包模型---有依赖的背包问题(每日一道算法2023.3.24)
有 N 个物品和一个容量是 V 的背包。物品之间具有依赖关系,且依赖关系组成一棵树的形状。如果选择一个物品,则必须选择它的父节点。原创 2023-03-24 14:41:02 · 429 阅读 · 0 评论 -
C++---背包模型---混合背包问题(每日一道算法2023.3.23)
有 N 种物品和一个容量是 V 的背包。物品一共有三类:第一类物品只能用1次(01背包);第二类物品可以用无限次(完全背包);第三类物品最多只能用 si 次(多重背包);每种体积是 vi,价值是 wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。原创 2023-03-23 15:05:38 · 591 阅读 · 0 评论 -
C++---背包模型---货币系统1(每日一道算法2023.3.21)
给你一个n种面值的货币系统,求组成面值为m的货币有多少种方案。原创 2023-03-21 12:25:59 · 752 阅读 · 0 评论 -
C++---背包模型---开心的金明(每日一道算法2023.3.20)
金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过 N 元钱就行”。今天一早金明就开始做预算,但是他想买的东西太多了,肯定会超过妈妈限定的 N 元。于是,他把每件物品规定了一个重要度,分为 5 等:用整数 1∼5 表示,第 5 等最重要。他还从因特网上查到了每件物品的价格(都是整数元)。他希望在不超过 N 元(可以等于 N 元)的前提下,使每件物品的价格与重要度的乘积的总和最原创 2023-03-20 14:55:25 · 141 阅读 · 0 评论 -
C++---背包模型---金明的预算方案(每日一道算法2023.3.19)
金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”。今天一早,金明就开始做预算了,他把想买的物品分为两类:主件与附件,附件是从属于某个主件的,下表就是一些主件与附件的例子:如果要买归类为附件的物品,必须先买该附原创 2023-03-19 11:15:46 · 282 阅读 · 0 评论 -
C++---背包模型---机器分配(每日一道算法2023.3.18)
总公司拥有 M台 相同 的高效设备,准备分给下属的 N个分公司。各分公司若获得这些设备,可以为国家提供一定的盈利。盈利与分配的设备数量有关。问:如何分配这M台设备才能使国家得到的盈利最大?**求出最大盈利值。**分配原则:每个公司有权获得任意数目的设备,但总台数不超过设备数 M。原创 2023-03-18 13:02:02 · 533 阅读 · 0 评论 -
C++---背包模型---背包问题求具体方案(每日一道算法2023.3.17)
有 N件物品和一个容量是 V的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出 **字典序最小的方案**。这里的字典序是指:所选物品的编号构成的序列。物品的编号范围是1..N。原创 2023-03-17 11:57:10 · 561 阅读 · 0 评论 -
C++---背包模型---买书(每日一道算法2023.3.16)
小明手里有n元钱全部用来买书,书的价格为10元,20元,50元,100元。问小明有多少种买书方案?(每种书可购买多本)原创 2023-03-16 13:24:04 · 483 阅读 · 0 评论 -
C++---背包模型---庆功会(每日一道算法2023.3.15)
为了庆贺班级在校运动会上取得全校第一名成绩,班主任决定开一场庆功会,为此拨款购买奖品犒劳运动员。期望拨款金额能购买最大价值的奖品,可以补充他们的精力和体力。原创 2023-03-15 13:52:35 · 672 阅读 · 0 评论 -
C++---背包模型---数字组合(每日一道算法2023.3.14)
给定 N个正整数 A1,A2,…,AN,从中选出若干个数,使它们的和为 M,求有多少种选择方案。原创 2023-03-14 15:20:18 · 362 阅读 · 0 评论 -
C++---背包模型---潜水员(每日一道算法2023.3.13)
潜水员为了潜水要使用特殊的装备。他有一个带2种气体的气缸:一个为氧气,一个为氮气。让潜水员下潜的深度需要各种数量的氧和氮。潜水员有一定数量的气缸。每个气缸都有重量和气体容量。潜水员为了完成他的工作需要特定数量的氧和氮。他完成工作所需气缸的总重的最低限度的是多少?原创 2023-03-13 19:45:40 · 1399 阅读 · 1 评论 -
C++---背包模型---二维费用的背包问题(每日一道算法2023.3.12)
有 N件物品和一个容量是 V的背包,背包能承受的最大重量是 M。每件物品只能用一次。体积是 vi,重量是 mi,价值是 wi。求解将哪些物品装入背包,可使物品总体积不超过背包容量,总重量不超过背包可承受的最大重量,且价值总和最大。输出最大价值。原创 2023-03-12 11:11:46 · 312 阅读 · 0 评论 -
C++---背包模型---收服精灵(每日一道算法2023.3.11)
宠物小精灵是一部讲述小智和他的搭档皮卡丘一起冒险的故事。一天,小智和皮卡丘来到了小精灵狩猎场,里面有很多珍贵的野生宠物小精灵。小智也想收服其中的一些小精灵。然而,野生的小精灵并不那么容易被收服。对于每一个野生小精灵而言,小智可能需要使用很多个精灵球才能收服它,而在收服过程中,野生小精灵也会对皮卡丘造成一定的伤害(从而减少皮卡丘的体力)。当皮卡丘的体力小于等于0时,小智就必须结束狩猎(因为他需要给皮卡丘疗伤),而使得皮卡丘体力小于等于0的野生小精灵也不会被小智收服。当小智的精灵球用完时原创 2023-03-11 12:59:35 · 456 阅读 · 0 评论 -
C++---背包模型---装箱问题(每日一道算法2023.3.9)
有一个箱子容量为 V,同时有 n 个物品,每个物品有一个体积(正整数)。要求 n 个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。原创 2023-03-09 12:07:04 · 911 阅读 · 0 评论 -
C++---真男人八题---多重背包单调队列优化(每日一道算法2023.3.8)
有 N种物品和一个容量是 V的背包。第 i种物品最多有 si件,每件体积是 vi,价值是 wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。原创 2023-03-08 18:49:13 · 475 阅读 · 0 评论 -
C++---背包模型---采药(每日一道算法2023.3.7)
辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。”如果你是辰辰,你能完成这个任务吗?原创 2023-03-07 13:27:11 · 579 阅读 · 0 评论 -
C++---线性dp---最长公共上升子序列(每日一道算法2023.3.6)
熊大妈的奶牛在小沐沐的熏陶下开始研究信息题目。小沐沐先让奶牛研究了最长上升子序列,再让他们研究了最长公共子序列,现在又让他们研究最长公共上升子序列了。小沐沐说,对于两个数列 A和 B,如果它们都包含一段位置不一定连续的数,且数值是严格递增的,那么称这一段数是两个数列的公共上升子序列,而所有的公共上升子序列中最长的就是最长公共上升子序列了。奶牛半懂不懂,小沐沐要你来告诉奶牛什么是最长公共上升子序列。不过,只要告诉奶牛它的长度就可以了。数列 A和 B的长度均不超过 3000。原创 2023-03-06 13:53:46 · 491 阅读 · 0 评论 -
C++---最长上升子序列模型---导弹防御系统(每日一道算法2023.3.5)
为了对抗附近恶意国家的威胁,R国更新了他们的导弹防御系统。一套系统的导弹拦截高度要么一直 **严格单调上升** 要么一直 **严格单调下降**。例如,一套系统先后拦截了高度为 3 和高度为 4 的两发导弹,那么接下来该系统就只能拦截高度大于 4 的导弹。给定即将袭来的一系列导弹的高度,请你求出至少需要多少套防御系统,就可以将它们全部击落。原创 2023-03-04 23:06:25 · 427 阅读 · 0 评论 -
C++---最长上升子序列模型---拦截导弹(每日一道算法2023.3.4)
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数,导弹数不超过1000),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。原创 2023-03-04 12:31:35 · 1044 阅读 · 0 评论 -
C++---最长上升子序列模型---最大上升子序列和(每日一道算法2023.3.3)
比如,对于序列(1,7,3,5,9,4,8),有它的一些上升子序列,如(1,7),(3,4,8)等。这些子序列中和最大为18,为子序列(1,3,5,9)的和。你的任务,就是对于给定的序列,求出最大上升子序列和。注意,最长的上升子序列的和不一定是最大的,比如序列(100,1,2,3)的最大上升子序列和为100,而最长上升子序列为(1,2,3)。原创 2023-03-03 13:07:29 · 972 阅读 · 0 评论 -
C++---最长上升子序列模型---友好城市(每日一道算法2023.3.2)
Palmia国有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市。北岸的每个城市有且仅有一个友好城市在南岸,而且不同城市的友好城市不相同。每对友好城市都向政府申请在河上开辟一条直线航道连接两个城市,但是由于河上雾太大,政府决定避免任意两条航道交叉,以避免事故。编程帮助政府做出一些批准和拒绝申请的决定,使得在保证任意两条航线不相交的情况下,被批准的申请尽量多。原创 2023-03-02 11:31:04 · 720 阅读 · 0 评论 -
C++---最长上升子序列模型---合唱队形(每日一道算法2023.3.1)
N位同学站成一排,音乐老师要请其中的 $(N-K)$ 位同学出列,使得剩下的 $K$ 位同学排成合唱队形。你的任务是,已知所有 N 位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。原创 2023-03-01 15:21:27 · 519 阅读 · 0 评论