(动态规划)菜鸟求一些问题的动态转移方程详解
发布网友
发布时间:2022-04-29 21:18
我来回答
共3个回答
热心网友
时间:2022-04-22 17:17
1是这样的:
d[i][j]表示:加到第i层的第j个数时数值之和的最大值。
a[i][j]表示:第i层的第j个数的值。
max(x,y)就是从x,y里挑个较大的数。
举个例子吧:
--------2
------6 2
----1 8 4
--1 5 6 8
看做这样方便一些:
2
6 2
1 8 4
1 5 6 8
里面的“4”就是第3行第3个数。
f[3][3]=a[3][3]+max(f[4][3],f[4][4])=4+maxn(6,8)=4+8=12
依此推到f[1][1].
注意,因为是由f[i+1][j]和f[i+1][j+1]推出f[i][j],所以要先有f[i+1][j]和f[i+1][j+1],才能有f[i][j].
所以状态转移(就是由一个值推另一个值)是从下到上的。
所以i循环应该是for (i=n;i>=1;i--)
j循环从前往后或从后往前都无所谓。
好了,1题就倒这里。
2.f[i][j]表示:从前i个物品里,挑出总质量不超过j的若干个东西时,最大能得到的总价值。
所以,第i个物品放包里值还是不放包里值呢?
f[i-1][j]表示第i个物品不放包里。
f[i-1][j-v[i]]+w[i]表示第i个物品放包里。虽然价值增加了w[i],不过放进去之前包里物品的体积不能超过j-v[i],否则就放不进去了。
所以,当f[i-1][j]比较大时,f[i][j]=f[i-1][j],因为第i个物品没放进去,所以跟取前i个物品中的若干个和取前i-1个物品中的若干个的意思是一样的。
f[i-1][j-v[i]+w[i]比较大时,f[i][j]=f[i-1][j-v[i]]+w[i],得到了前i个物品不超过j的体积时能得到的最大的总价值。
注意,当j<v[i]时,f[i][j]必须等于f[i-1][j],因为第i个物品放不进包。
可以练习一道题:noip2005采药。
祝君学c++愉快。
热心网友
时间:2022-04-22 18:35
(即要解出这个问题就必须解出它的子问题)。那么就可以根据它与子问题的关系得到一个状态转移方程。 但动态规划的意义在于,如果多个子问题都包含相同的“
热心网友
时间:2022-04-22 20:10
这里解释下01背包
基本思路 这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。
用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。
则其状态转移方程便是:
f[i][v] = Max
{
f[i − 1][v]//不放第i个物品恰好放入v体积所得价值
f[i − 1][v − c[i]] + w[i]//放第i个物品后 还能放v - c[i] 体积 价值+ w[i]}
应该懂了吧
手打 不易
(动态规划)菜鸟求一些问题的动态转移方程详解
注意,因为是由f[i+1][j]和f[i+1][j+1]推出f[i][j],所以要先有f[i+1][j]和f[i+1][j+1],才能有f[i][j].所以状态转移(就是由一个值推另一个值)是从下到上的。所以i循环应该是for (i=n;i>=1;i--)j循环从前往后或从后往前都无所谓。好了,1题就倒这里。2.f[i]...
动态规划如何去找动态转移方程?
枚举就是指把一些答案先算出来,然后类似于找规律那样,找到一般情况的技术方法,写出状态转移方程。例子:这个是去年NOIP提高组复赛的一道题“传纸条”,是比较经典的动规+递推,可以看看。 描述 Description 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题。一次素质拓展活动中,班上同学...
TSP问题的动态规划算法
动态规划算法在处理TSP问题时,首先初始化dp数组,将起点到每个城市的距离作为初始值。接着,逐步构建集合S,从包含一个城市扩展到包含两个、三个城市,直至包含所有n个城市。在每次扩展过程中,根据状态转移方程计算新的最小路径距离。动态规划算法利用已计算结果,避免重复计算,显著提高计算效率。当集合S...
用动态规划算法怎样求解01背包问题
所以用动态规划来解决是非常贴切的。我们设f[V]表示已经使用容量为V时所能获得的最大价值,w[i]表示i物品的质量,c[i]表示i物品的价值。for(int i=1;i<=n;i++) for(int j=V;j>=w[i];j--) f[j]=max(f[j],f[j-w[i]]+c[i]);这便是所谓的一个状态转移方程。f[j]...
如何快速写出动态规划的状态转移方程?
要实现根据程序的需要动态分配存储空间,就必须用到以下几个函数 1、malloc函数 malloc函数的原型为:void *malloc (unsigned int size)其作用是在内存的动态存储区中分配一个长度为size的连续空间。其参数是一个无符号整形数,返回值是一个指向所分配的连续存储域的起始地址的指针。还有一点必须注意的是...
算法题套路总结(三)——动态规划
前两篇我总结了链表和二分查找题目的一些套路,这篇文章来讲讲动态规划。动态规划从我高中开始参加NOIP起就一直是令我比较害怕的题型,除了能一眼看出来转移方程的题目,大部分动态规划都不太会做。加上后来ACM更为令人头秃的动态规划,很多题解看了之后,我根本就不相信自己能够想出来这种解法,看着...
动态规划法如何用于求解最短路径问题?
动态规划法是一种用于求解最短路径问题的有效方法。它通过将问题分解为子问题,并利用子问题的解来构建原问题的解,从而避免了重复计算。在求解最短路径问题时,我们可以使用动态规划法来寻找从一个起点到终点的最短路径。首先,我们需要定义一个状态转移方程,该方程描述了如何从当前状态转移到下一个状态...
NOIP传球问题怎么想???求解
也就是说,第i次传球后的球在第j个人手中的情况总数即为上一次他左右两边两个人的情况总数之和。如此,就可以用动态规划解决了,状态转移方程:f[i,j]= f[i-1,j-1]+f[i-1,j+1](1<j<n)f[i-1,2]+f[i-1,n](j=1)f[i-1,n-1]+f[i-1,1](j=n) (1<=i<=m)初始条件...
一次性讲透背包问题——动态规划经典问题的深度解析
与0/1背包不同,完全背包允许无限数量的物品。状态转移方程有所不同,但仍可通过动态规划求解。例如,dp[i][j]表示前i件物品在容量j下的最大价值。总结,掌握0/1和完全背包是解背包问题的关键,它们在LeetCode等平台上有大量实战题目,如《518. 零钱兑换 II》和《377. 组合总和 Ⅳ》。
状态转移方程如何设计动态转移方程
设计动态转移方程的关键在于理解和应用动态规划方法。动态规划的前提是问题需要满足最优化原理和无后效性条件。接下来,按照以下步骤进行设计:1. 明确决策对象:首先,识别问题中的决策变量,这是动态规划的基础,它决定了问题的分解和求解路径。2. 划分阶段:将问题分解为若干个阶段,每个阶段代表问题的一...