
动态规划
文章平均质量分 63
2025黄锦豪
一个学到动态规划的小学生
展开
-
1185. 【动态规划】砝码称重
设有1g、2g、3g、5g、10g、20g的砝码各若干枚(其质量<=1000g),求出用他们能称出的质量的种类数(不包括质量为0的情况)。a1 a2 a3 a4 a5 a6(表示1g砝码有a1个,2g砝码有a2个,......20g砝码有a6个)举个栗子:2 1 2 1 1 1存在a里就是1 1 2 3 3 5 10 20;Total=3(表示可以称出1g,2g,3g三种不同的重量)先打一个b[10]={0,1,2,3,5,10,20};再用a数组记录展开后的a1个1g,a2个2g。原创 2025-01-17 11:26:15 · 225 阅读 · 0 评论 -
1257. 【动态规划】能量项链
如果前一颗能量珠的头标记为 m,尾标记为 r,后一颗能量珠的头标记为 r,尾标记为 n,则聚合后释放的能量为 m× r × n(Mars 单位),新产生的珠子的头标记为 m,尾标记为 n。基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。与分治法最大的差别是:适合于用动态规划法求解的问题,经分解后得到的子问题往往不是互相独立的(即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解)。原创 2025-01-12 16:28:37 · 453 阅读 · 0 评论 -
1256. 【动态规划】护卫队
当一组车队到达了桥的另一端,该端的指挥员就用电话通知另一端的指挥员,这样下一组车队才能开始通过该桥。一组车队通过该桥的时间是用该车队中速度最慢的车通过该桥所需的时间来表示的。接下来的几行中,每行包含两个正整数W和S(用空格隔开),W表示该车的重量(用吨表示),S表示该车过桥能达到的最快速度(用千米/小时表示)。 在状态转移的过程中,我们需要考虑车组的重量以及其中最慢车的时间。 因此,我们只需建立一维数组f[i]表示到i的最佳组合方案,然后对每一个i便利1至i-1,找出i与其前方车辆的最佳组合即可。原创 2025-01-12 16:25:54 · 414 阅读 · 0 评论 -
1250. 【动态规划】复制书稿
现在要把m本有顺序的书分给k个人复制(抄写),每一个人的抄写速度都一样,一本书不允许给两个(或以上)的人抄写,分给每一个人的书,必须是连续的,比如不能把第一、第三和第四本书给同一个人抄写。(区间)DP F[I][J]表示前i本书分给j个人用的最短时间 由于每一次j的状态由比j小的状态得出,所以要先枚举j,然后枚举i,接着枚举上一次抄书的人是谁。共k行,每行两个整数,第i行表示第i个人抄写的书的起始编号和终止编号。k行的起始编号应该从小到大排列,如果有多解,则尽可能让前面的人少抄写。第一行两个整数m,k;原创 2025-01-12 16:22:06 · 228 阅读 · 0 评论 -
1249. 【动态规划】方格取数
二维的思路偏向贪心,即定义dp[ i ][ j ]为走到点[ i , j ]时的最佳选项,此时保证第一遍走的时候为最佳答案,第二遍走时为去掉第一遍走过的点时的最佳答案,保证两遍都是分别的最佳答案但非整体的最佳答案……某人从图中的左上角的A出发,可以向下行走,也可以向右行走,直到达右下角的B点。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字0)。我们使用dp[ i ][ j ][ k ][ l ]表示第一遍走到点[ i , j ],第二遍走到点[ k , l ]的最优解,代码如下:。原创 2025-01-12 16:11:25 · 388 阅读 · 0 评论 -
1183. 【动态规划】开心的金明
下面来到我们的正题: 首先判断是否为背包问题,可见其背包就是money的总数,质量就是重要度*money。背包问题主要是背模板,这里收录了一些模板。一些复杂的背包问题(如泛化物品)未收录。到此建模完成,思考+读题用时3min。有根据其特性可知这是01背包。原创 2025-01-12 16:01:16 · 417 阅读 · 0 评论 -
1188. 【动态规划】质数和分解
任何大于 1 的自然数 N,都可以写成若干个大于等于2且小于等于 N 的质数之和表达式(包括只有一个数构成的和表达式的情况),并且可能有不止一种质数和的形式。例如9 的质数和表达式就有四种本质不同的形式:9 = 2+5+2 = 2+3+2+2 = 3+3+3 = 2+7。这里所谓两个本质相同的表达式是指可以通过交换其中一个表达式中参加和运算的各个数的位置而直接得到另一个表达式。试编程求解自然数 N 可以写成多少种本质不同的质数和表达式。依次输出每一个自然数 N 的本质不同的质数和表达式的数目。原创 2025-01-05 13:46:01 · 178 阅读 · 0 评论 -
1171. 【动态规划】机器分配
1.动态规划解法一道经典的区间DP练习题。设f[i][j]为前i个公司总共分配j台机器的最大利润。0,1,2……m那么,如何处理方案输出问题呢?我们设对于前i个公司共分配j台机器的最优方案,第h个公司应分配多少台机器,当状态发生转移时,更新path数组即可。最终的答案就存放在之中。贴代码:int main()cin>>n>>m;i原创 2025-01-05 13:24:03 · 505 阅读 · 0 评论 -
1169. 【动态规划】友好城市
有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市。对于情况二,STL中有现成的函数——lower_bound(这题upper_bound也可以),他的时间复杂度是logn,效率很高(其实就是二分查找)。状态转移方程为f(i)=max{f(i),f(j)+1|S(i)>s(j)} (i=1,i<=n) (j=i+1,j<=n)第2行到第n+1行,每行两个整数,中间用一个空格隔开,分别表示南岸和北岸的一对友好城市的坐标。第1行,一个整数N(1<=N<=5000),表示城市数。原创 2025-01-02 21:01:13 · 251 阅读 · 0 评论 -
1248. 【动态规划】编辑距离
2.循环嵌套遍历f数组,先处理a[i]==b[j]的情况,如不满足,再从三种情况中选择最小的,作为f[i][j]的值。i-1]转换为b[1..j],那就可以将a[i]删除,共需k+1个操作,所以是f[i-1][j]+1;然后考虑一般情况(这里是DP思想):我们要得到将a[1..i]经过最少次数的操作就转化为b[1..j],那么我们就必须在此之前以最少次数(假设为k次)的操作,使现在的a和b只需再做一次操作或者不做操作就可以使a[1..i]转化到b[1..j]。假设用f[i][j]表示将串a[1…原创 2025-01-02 20:42:33 · 285 阅读 · 0 评论 -
1124. 【动态规划】数字三角形
往左下方是‘4’,得到的最终值为6,往右下方是‘5’,得到的最终值是7.这时当然选择右下方。再比较走两条路的值,右边的值更大,选择右边的值。写一个程序来计算从最高点开始在底部任意处结束的路径经过数字的和的最大。同理,应选择左下,得到最终值是12。若从倒数第二排的‘2’开始走,只有2个选择,往左下方和右下方。再次考虑倒数第二排的7,起点的值保存了从起点到终点的最优值,也就是答案。,我们不需要在选择下一步怎么走,直接加上左下的值即可。同理,走右下时,直接加上右下的值即可。单独的一行包含那个可能得到的最大的和。原创 2025-01-01 19:30:10 · 201 阅读 · 0 评论 -
1247. 【动态规划】乘积最大纯代码
今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年。在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得以参加。活动中,主持人给所有参加活动的选手出了这样一道题目:设有一个长度为N的数字串,要求选手使用K个乘号将它分成K+1个部分,找出一种分法,使得这K+1个部分的乘积最大。现在,请你帮助你的好朋友XZ设计一个程序,求得正确的答案。第一行共有2个自然数N,K(6≤N≤40,1≤K≤6)不想讲了实在太简单!原创 2024-12-29 21:00:35 · 179 阅读 · 0 评论