![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
acwing
Libert_AC
执着是最好的方法
展开
-
背包问题求具体方案
有N件物品和一个容量是V的背包。每件物品只能使用一次。第i件物品的体积是vi,价值是wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出字典序最小的方案。这里的字典序是指:所选物品的编号所构成的序列。物品的编号范围是1…N。输入格式第一行两个整数,NV,用空格隔开,分别表示物品数量和背包容积。接下来有N行,每行两个整数vi,wi,用空格隔开,分别表示第i件物品的体积和价值。输出格式。原创 2023-02-07 21:33:01 · 176 阅读 · 0 评论 -
潜水员(二维费用的背包问题)
让潜水员下潜的深度需要各种的数量的氧和氮。因为优化成二维的,我们要求的就是f[V1~V1 + max(V1)][V2 + max(V2],最大值不会超过他们的两倍。此后的k行,每行包括ai,bi,ci(1≤ai≤21,1≤bi≤79,1≤ci≤800)3整数。如果潜水员需要5升的氧和60升的氮则总重最小为249(1,2或者4,5号气缸)。它们表示氧,氮各自需要的量。仅一行包含一个整数,为潜水员完成工作所需的气缸的重量总和的最低值。你的任务就是计算潜水员为了完成他的工作需要的气缸的重量的最低值。原创 2023-02-06 16:55:13 · 88 阅读 · 0 评论 -
宠物小精灵之收服
现在已知小智的精灵球数量和皮卡丘的初始体力,已知每一个小精灵需要的用于收服的精灵球数目和它在被收服过程中会对皮卡丘造成的伤害数目。输入数据的第一行包含三个整数:N(0原创 2023-02-06 11:54:55 · 133 阅读 · 0 评论 -
二维费用的背包问题
求解将哪些物品装入背包,可使物品总体积不超过背包容量,总重量不超过背包可承受的最大重量,且价值总和最大。f[i, j, k] 表示从前i个物品里面选,体积不超过j,重量不超过k的最大价值。,用空格隔开,分别表示物品件数、背包容积和背包可承受的最大重量。二维背包的费用问题,就是除了体积,再加上了重量限制。因为,与i无关,所以可以再进一步优化成二维。要从大到小循环,确保每次计算的是上一层的。的背包,背包能承受的最大重量是。输出一个整数,表示最大价值。,用空格隔开,分别表示第。件物品的体积、重量和价值。原创 2023-02-06 11:32:54 · 226 阅读 · 0 评论 -
装箱问题(背包问题)
有一个箱子容量为V(正整数,0 ≤ V ≤ 20000),同时有n个物品(0<n ≤ 30),每个物品有一个体积(正整数)。这道题就是01背包的变形,就是选一些物品装进容量不超过V的箱子里,使得所选的总体积最大。回想01背包,选一些物品装进背包不超过背包体积,使得选的价值最大。要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。要将n个物品,每个物品带有体积装进容量为V的箱子里。那么箱子的剩余容量就是最小,把物品体积看成价值就行。接下来n行,分别表示这n个物品的各自体积。1个整数,表示有n个物品。原创 2023-02-06 11:08:49 · 1540 阅读 · 0 评论 -
地宫取宝(DP)
走过某个格子时,如果那个格子中的宝贝价值比小明手中任意宝贝价值都大,小明就可以拿起它(当然,也可以不拿)。f[i, j , cnt, c] 表示再在(i,j) 取cnt个物品,物品最大值为c的合适的方案。请你帮小明算一算,在给定的局面下,他有多少种不同的行动方案能获得这。这是一道DP问题,与前面的摘花生相似,是摘花生与最长上升子序列的结合。最后一步从上面来(1)取 (满足条件,最大值取)(2) 不取。个格子的矩阵,每个格子放一件宝贝,每个宝贝贴着价值标签。当小明走到出口时,如果他手中的宝贝恰好是。原创 2023-02-05 21:27:47 · 109 阅读 · 1 评论 -
最远距离(树的直径)
我们规定,如果一个无向连通图满足去掉其中的任意一条边都会使得该图变得不连通,则称该图为有效无向连通图。给定一个n个点m条边的有效无向连通图,点的编号为1∼n,所有边的长度均为1。两点之间的距离定义为两点之间的最短距离。请你计算,给定图中距离最远的两个点之间的距离。输入格式第一行包含两个整数n,m。接下来m行,每行包含两个整数a,b,表示点a和点b之间存在一条无向边。输出格式一个整数,表示给定图中距离最远的两个点之间的距离。数据范围。原创 2023-02-04 22:06:17 · 223 阅读 · 0 评论 -
分级(线性DP)
给定长度为N的序列A,构造一个长度为N的序列B,满足:B 非严格单调,即 B1≤B2≤…≤BN或 B1≥B2≥…≥BN。最小化 S=∑Ni=1|Ai−Bi只需要求出这个最小值S。输入格式第一行包含一个整数N。接下来N行,每行包含一个整数Ai。输出格式输出一个整数,表示最小S值。数据范围1≤N≤20000≤Ai≤1063。原创 2023-02-03 13:39:39 · 133 阅读 · 0 评论 -
打怪兽(二分加贪心)
有n个怪兽(编号1∼n),其中第i个怪兽的防御值为ai。你是一个魔法师,初始时拥有m点法力值。当你的法力值大于0时,你可以对怪兽发动攻击,每一次攻击具体为:任意选择 1∼2个怪兽,并消耗 x 点法力值(x 可以是一个不超过你当前法力值的任意正整数),对每个所选怪兽发动一次伤害为 x 的攻击。对于受到攻击的怪兽,如果其防御值小于或等于x,则会被你消灭。否则,它将免疫此次攻击,不受任何影响。请你确定最大的整数k,满足:通过合理安排攻击,可以将第1∼k。原创 2023-02-03 10:48:41 · 246 阅读 · 0 评论 -
拦截导弹(数据加强版本)
但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。2行,每行一个整数,第一个数字表示这套系统最多能拦截多少导弹,第二个数字表示如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。看数据比较大,所以使用二分来写,贪心思想,每次把a[i]放到比他小的位置,得到的序列长度就是答案。原创 2023-02-02 23:17:22 · 127 阅读 · 0 评论 -
最长公共上升子序列
如果它们都包含一段位置不一定连续的数,且数值是严格递增的,那么称这一段数是两个数列的公共上升子序列,而所有的公共上升子序列中最长的就是最长公共上升子序列了。状态表示 f[i][j] 集合:表示 a 中前 i 个数字,b 中前 j 个数字 ,且当前以 b[j] 结尾的子序列的方案。小沐沐先让奶牛研究了最长上升子序列,再让他们研究了最长公共子序列,现在又让他们研究最长公共上升子序列了。这是一道最长上升子序列和最长公共子序列的结合题目。输出一个整数,表示最长公共上升子序列的长度。,序列中的数字均不超过。原创 2023-02-02 21:58:08 · 73 阅读 · 0 评论 -
杨老师的照相排列
从集合角度考虑,分成五排,第一排放a进去 和不放a 的数量相等,后面同理。在合影时要求每一排从左到右身高递减,每一列从后到前身高也递减。首先我们可以考虑到暴力搜索来解决,但是超时,于是就要用dp。枚举五排,因为k最大值为5,那么就需要五维度数组。学生的身高互不相同,把他们从高到底依次标记为。每组测试数据输出一个答案,表示不同安排的数量。的数据时,表示输入终止,且该数据无需处理。个整数,表示从后向前每排的具体人数。每组数据两行,第一行包含一个整数。个学生合影,站成左端对齐的。这道题目的思考比较条约。原创 2023-02-02 21:10:22 · 87 阅读 · 0 评论 -
最低通行费用(线性DP)
注意:不能对角穿越各个小方格(即,只能向上下左右四个方向移动且不能离开网格)。后面 N 行,每行 N 个不大于 100 的正整数,为网格上每个小方格的费用。一个商人穿过一个 N×N 的正方形的网格,去参加一个非常重要的商务活动。样例中,最小值为 109=1+2+5+7+9+12+19+21+33。每穿越中间 1 个小方格,都要花费 1 个单位时间。而在经过中间的每个小方格时,都需要缴纳一定的费用。第一行是一个整数,表示正方形的宽度 N。输出一个整数,表示至少需要的费用。他要从网格的左上角进,右下角出。原创 2023-01-26 17:29:40 · 168 阅读 · 0 评论 -
摘花生(数字三角形模型)
每组数据的接下来R行数据,从北向南依次描述每行花生苗的情况。每行数据有C个整数,按从西向东的顺序描述了该行每株花生苗上的花生数目M。地里每个道路的交叉点上都有种着一株花生苗,上面有若干颗花生,经过一株花生苗就能摘走该它上面所有的花生。有两种可能,分别是从左边来的,从上面来的,每次取每步方案的最大值,再加上本身的数量。对每组输入数据,输出一行,内容为Hello Kitty能摘到得最多的花生颗数。每组数据的第一行是两个整数,分别代表花生苗的行数R和列数 C。第一行是一个整数T,代表一共有多少组数据。原创 2023-01-26 17:13:55 · 90 阅读 · 0 评论 -
友好城市(数据加强版)
编程帮助政府做出一些批准和拒绝申请的决定,使得在保证任意两条航道不相交的情况下,被批准的申请尽量多。保证两条友好城市之间连线不相交,必须要满足所选南岸的友好城市坐标是递增的,这不就是最长上升子序列吗,对于北岸我们需要排序,然后逐个选取北岸对应的南岸友好城市坐标即可。第2行到第n+1行,每行两个整数,中间用一个空格隔开,分别表示南岸和北岸的一对友好城市的坐标。一个贪心的思想,每次只需要找到比a[i]小的最大的位置就可以了,避免无用的计算。仅一行,输出一个整数,表示政府所能批准的最多申请数。原创 2023-01-26 16:57:37 · 127 阅读 · 0 评论 -
合唱队形(线性DP)
N位同学站成一排,音乐老师要请其中的(N−K)位同学出列,使得剩下的K位同学排成合唱队形。合唱队形是指这样的一种队形:设K位同学从左到右依次编号为12…K,他们的身高分别为T1T2TK, 则他们的身高满足T1…>TK(1≤i≤K)。你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。输入格式输入的第一行是一个整数N,表示同学的总数。第二行有N个整数,用空格分隔,第。原创 2023-01-24 16:45:17 · 76 阅读 · 0 评论 -
登山(线性DP)
五一到了,ACM队组织大家去登山观光,队员们发现山上一个有N个景点,并且决定按照顺序来浏览这些景点,即每次所浏览景点的编号都要大于前一个浏览景点的编号。同时队员们还有另一个登山习惯,就是不连续浏览海拔相同的两个景点,并且一旦开始下山,就不再向上走了。队员们希望在满足上面条件的同时,尽可能多的浏览景点,你能帮他们找出最多可能浏览的景点数么?Line 1: N (2原创 2023-01-24 16:34:33 · 69 阅读 · 0 评论