dp
一个有思想的逗号
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
宠物小精灵之收服(动态规划)
对于每一个野生小精灵而言,小智可能需要使用很多个精灵球才能收服它,而在收服过程中,野生小精灵也会对皮卡丘造成一定的伤害(从而减少皮卡丘的体力)。如果小智选择了收服,那么一定会扔出能够收服该小精灵的精灵球,而皮卡丘也一定会受到相应的伤害;现在已知小智的精灵球数量和皮卡丘的初始体力,已知每一个小精灵需要的用于收服的精灵球数目和它在被收服过程中会对皮卡丘造成的伤害数目。行,每一行代表一个野生小精灵,包括两个整数:收服该小精灵需要的精灵球的数量,以及收服过程中对皮卡丘造成的伤害。的野生小精灵也不会被小智收服。原创 2024-11-08 19:56:20 · 467 阅读 · 0 评论 -
动态规划使用最少张数的货币找钱
思路:当只用面值为s[1], s[2],…问题:设有n种不同面值的货币,存于数组s[1..n]中。现用这些货币来找钱,各种货币使用的个数不限。C[i][j]=min(C[i][j-s[i]]+1,C[i-1][j]),当j>=s[i]C[i][j]=0x3f3f3f3f,当i=0,j!C[i][j]=C[i-1][j],当j原创 2024-10-24 11:21:44 · 303 阅读 · 0 评论 -
插入加号使数字串表达式最小
问题:有一个由数字1,2,3……,9组成的数字串(长度不超过500),问如何将M(1原创 2024-10-24 08:55:40 · 450 阅读 · 0 评论 -
100层楼两个玻璃球找临界楼层所需要的次数
max(i,1+F[n-i])表示第一次从第i层楼扔,如果碎了,临界楼层一定在1~i层,但是现在只有一个玻璃球了,所以只能从1楼一层层往上找,直到i-1层。如果没碎,临界楼层一定在i+1~n层,共有n-i层,因为现在有两个玻璃球,所以和只有一个球那样找,有两个玻璃球找的次数为F[n-i],加上第一次扔的1次,共1+F[n-i]次。对于第n层楼,F[n]=min(max(1,1+F[n-1]),max(2,1+F[n-1]),max(3,1+F[n-3]),…,max(n-1,1+F[1]))。原创 2024-10-23 21:09:33 · 952 阅读 · 0 评论 -
动态规划数塔问题
题目:从数塔顶层到底层或从底层到顶层,在每一个结点可以选择向左走或是向右走,要求找出一条路径,使路径上的数值和最大。考虑从顶到底,需要在叶子结点中找最大和。而从底到顶,最大和一定为dp[1][1]。dp[i][j]表示在第i层第j个位置上的最大和。原创 2024-10-23 17:23:07 · 333 阅读 · 0 评论 -
动态规划矩阵连乘
2、递归方法(用二维数组m[i][j]记录已经算过的course(i,j))题目:n个矩阵连乘,求最小的计算次数。Mi矩阵维度为r[i]×r[i+1]。1、递归方法(有大量的重复计算)原创 2024-10-23 16:08:57 · 444 阅读 · 0 评论 -
动态规划求数值和最小路径
首先对dp[i][j]进行初始化,显然,dp[0][0]=a[0][0],第一行:dp[0][j]=dp[0][j-1]+a[0][j],因为点(0,j)只能由(0,j-1)向右走得到。:求在(i,j)处的最小路径长度,只需要取(i-1,j),(i,j-1)和(i-1,j-1)中的最小值,然后加上点(i,j)的值即可。因为对于(i,j)点,只有三种情况能到达该点,即从(i-1,j)向下走,(i,j-1)向右走,(i-1,j-1)向斜向下走。因此,最后所求为dp[n-1][m-1]。原创 2024-10-23 09:55:32 · 350 阅读 · 0 评论 -
蓝桥杯练习系统(算法训练)ALGO-936 砝码称重
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s。小明捡到了一架没有游标的天平和N个标有重量的砝码,于是他想知道他能够称出多少种不同的重量(假设只能将砝码放在一侧)。输入的第一行包含一个正整数N,表示有N个砝码。接下来一行有N个正整数,表示N个砝码的重量。cnost int N,M的设置居然对答案有影响?输出一行,包含一个整数,表示能够称出多少种不同的重量。N原创 2024-05-25 22:39:10 · 261 阅读 · 0 评论 -
蓝桥杯练习系统(算法训练)ALGO-939 区间最大和
思路:dp[i]:表示以第i个数字结尾的序列和最大值为dp[i]。因此,最大的dp[i]即为答案。思路: 利用前缀和,通过sum[R]-sum[L-1]求[L,R]区间的和。暴力方法是将每个区间的和都算出来,取最大值,这样的话时间复杂度为O(n^2),会超时。内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s。给定一段长度为N的整数序列A,请从中选出一段连续的子序列(可以为0)使得这段的总和最大。一个整数表示选出的最大的和。原创 2024-05-20 20:43:33 · 379 阅读 · 0 评论 -
蓝桥杯练习系统(算法训练)ALGO-965 进击的青蛙
青蛙X正准备跳过一座桥,这座桥被划分为N段,记青蛙所在的起始点为0,桥的末端为N。桥上的一些点有一些石子,这些点是无法跳上去的。青蛙每次跳跃能向前跳跃+1,+2,+3段,现在请你算出跳到末端的总方法数。内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s。接下来N行,表示从点1~N的道路情况,每行一个数字0或1,1表示有石子。输出一行,为一个整数,代表方法数,无法到达为“No Way!第一行一个数字N,代表桥的长度。原创 2024-03-27 08:28:03 · 402 阅读 · 0 评论 -
最长公共子序列(Longest Common Subsequence,LCS)
f[i][j]为s1的前i个字符和s2的前j个字符的最长子序列长度。因此答案为f[s1.length()][s2.length()]。例:两序列algorithms、alchemist的最长公共子序列为alhms,长度为5。问题描述:给定两个序列s1,s2,求二者的最长公共子序列长度。得到f[i][j]后,通过LCS函数递归求得最长公共子序列。想要求f[i][j],可以根据前i-1、j-1个字符求得。f[i][j]=0,i=0或j=0。原创 2024-03-24 09:48:38 · 240 阅读 · 0 评论 -
0-1背包
思路:在面临第i件物品时,可以选择不偷:f[i-1][j],也可以选择偷:f[i-1][j-w[i]]+v[i],取两者的最大值即为f[i][j]的值。物品编号:1 2 3 4。物品重量:2 3 4 5。物品价值:3 4 5 8。现有4个物品,小偷背包总容量为8,怎么可以偷得价值最多的物品?原创 2024-03-23 09:28:53 · 266 阅读 · 0 评论 -
洛谷——P1352 没有上司的舞会
2、不选u,dp[u][0]+=max(dp[s1][0],dp[s1][1])+max(dp[s2][0],dp[s2][1])对于 100% 的数据,保证 1≤n≤6×10^3,−128≤ri≤127,1≤l,k≤n,且给出的关系一定是一棵树。dp[u][0]表示:以u为根节点的子树并且不包括u的最大快乐指数;1、选u,dp[u][1]+=dp[s1][0]+dp[s2][0]dp[u][1]表示:以u为根节点的子树并且包括u的最大快乐指数。输出一行一个整数代表最大的快乐指数。原创 2024-03-14 22:18:36 · 578 阅读 · 0 评论 -
蓝桥杯练习系统(算法训练)ALGO-981 过河马
一开始,它是在一个n行m列棋盘的左下角(1,1)的位置,它想要走到终点右上角(n,m)的位置。dp[i][j]:表示从(1,1)到(i,j)一共有dp[i][j]种方法,所以答案为dp[n][m]。dp[i][j]=dp[i-1][j-2]+dp[i-2][j-1]+dp[i-2][j+1]+dp[i-1][j+2],分别对应着走法1、2 、3、4,只不过还要判断一下有没有越界。第一行两个数n,m,表示一个n行m列的棋盘,马最初是在左下角(1,1)的位置,终点在右上角(n,m)的位置。原创 2024-03-09 18:33:02 · 568 阅读 · 0 评论 -
蓝桥杯练习系统(算法训练)ALGO-987 强力党逗志芃
逗志芃励志要成为强力党,所以他将身上所以的技能点都洗掉了重新学技能。现在我们可以了解到,每个技能都有一个前提技能,只有学完了前提技能才能学习当前的技能(有一个最根本的技能不需要前提技能)。学习每个技能要消耗一个技能点,然后可以获得这个技能的威力值。之后的n-1行,每行两个数x,y,表示y技能的前提技能是x,也就是说先学第x个技能才能学弟y个技能。第一行两个数n,m表示有n个技能和m个技能点。第二行有n个数,第i个数表示第i个技能的威力值。0<n,m<=200, 技能的威力值不超过200。原创 2024-03-05 13:44:39 · 258 阅读 · 0 评论 -
蓝桥杯练习系统(算法训练)ALGO-988 逗志芃的危机
逗志芃又一次面临了危机。现在她妹子要和他玩一个游戏,这个游戏是这样的:一共有n个数(n是偶数)写成一行,然后两个人轮流取数,每次只能从最前面或者最后面取走一个数,全部取完则游戏结束,之后每个人取走的数的和就是每个人的得分。(注意,妹子智商是maxlongint所以是不会犯错的,每次的策略必然最优,而且逗志芃是先手)可以举个例子来理解:当只有两个数的时候(data[L]和data[R]),要么取左边,要么取右边,ans[L][R]=max(data[L],data[R]),ans[L+1][R]自然为0。原创 2024-03-04 21:23:50 · 568 阅读 · 1 评论
分享