- 博客(8)
- 收藏
- 关注
原创 dp——P1049 装箱问题(滚动数组)
一、 题目描述1、题目描述有一个箱子容量为V(正整数,0≤V≤20000),同时有nn个物品(0<n≤30,每个物品有一个体积,正整数)。要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。2、输入格式1个整数,表示箱子容量。1个整数,表示有n个物品。接下来n行,分别表示这n个物品的各自体积。3、输出格式1个整数,表示箱子剩余空间。4、输入输出样例样例输入2468312797样例输出0二、解题思路这一道题是一个明显的01背包 ,如果把这个箱子
2020-07-30 17:10:26
323
原创 dp——poj2.6基本算法之动态规划【4978:宠物小精灵之收服】
一、题目描述题目链接二、解题思路这道题目一看就是最优子结构的问题,当然,也是类似于背包的一种动态规划,叫做多约束背包,这种背包有多个约束(当然,看上去和01背包很相似,都是一个物品只能选择要或者不要),如皮卡丘体力的约束、野生小精灵数量的约束、精灵蛋的约束。是所以这类背包是与01背包不同的。1、数学建模因为本道题目只有3个约束,所以,就要设置一个三维数组:dp[i][j][k]代表前i个野生小精灵,假如皮卡丘有j的体力值,小智有k个精灵蛋时最多能获得的精灵数量。因为这道题目还要求如果可以收
2020-07-29 21:39:57
548
原创 dp——poj2.6基本算法之动态规划【2728:摘花生】
一、题目描述题目链接二、解题思路因为只是一道多阶段最优化决策问题,虽然它长得有点像dfs或者bfs,但是用那两种方法就会无情的超时,此时注意:dijkstra的话可以返回(就是它会把所有的花生都算上),结合这四种算来看,动态规划的做法是最优的,所以就要采用动态规划来做这道题。1、数学建模令dpi,j表示第i行,第j列的最多可以获得的最多的花生的数量。dp数组12112248ans=dp2,2=8dp数组1231259
2020-07-28 21:25:39
534
原创 dp——「一本通 1.3 例 1」数的划分
dp——「一本通 1.3 例 1」数的划分一、题目描述题目链接二、解题思路题目说这是一道搜索的题,可能最近写动态规划写多了,但我惊奇的发现,这也是一道多阶段决策最优化问题,于是,就开始写动态规划的代码。【数学建模】令dpi,j代表用j个数字的和为i的种数。dp数组1231100211031114121512261337134ans=dpn,m=dp7,3=4【状态转移方程】1、从表格
2020-07-27 18:13:20
247
原创 dp——多约束背包
dp——多约束背包一、题目描述题目N件物品和一个容量是 V的背包,背包能承受的最大重量是 M。每件物品只能用一次。体积是 vi,重量是 mi,价值是 wi。求解将哪些物品装入背包,可使物品总体积不超过背包容量,总重量不超过背包可承受的最大重量,且价值总和最大。输出最大价值。输入格式第一行三个整数,N,V,M,用空格隔开,分别表示物品件数、背包容积和背包可承受的最大重量。接下来有 N 行,每行三个整数 vi,mi,wi,用空格隔开,分别表示第 i 件物品的体积、重量和价值。输出格式输出一个整数,
2020-07-27 13:38:03
1786
1
原创 贪心——「一本通 1.1 例 5」智力大冲浪
「一本通 1.1 例 5」智力大冲浪一、题目描述题目链接二、解题思路用官方的词语解释:这是一个带期限和罚款的单位时间任务调度的问题,需要使用贪心。其实带期限和罚款的单位时间任务调度问题是有时间期限和罚款(奖励),的一类问题,要求解的是在区间时间段内所能够达到的最多的奖励(最少的罚款)。这虽然是一个最优子结构的问题,但是也可以使用贪心来求解。【贪心策略】1、排序因为要求解最少数量的罚款,那么就一定要先解决罚款数量多的项目。为了方便起见,可以先把罚款的金额从大到小排序。这样,就可以直接顺序处理
2020-07-27 12:29:28
489
原创 Dp——最长上升子串、最长上升子序列
最长上升子串一、题目描述描述一个数的子串bi,当b1 < b2 < … < bS的时候,我们称这个子串是上升的。对于给定的一个序列(a1, a2, …, aN),我们可以得到一些上升的子串(ai1, ai2, …, aiK),这里1 <= i1 < i2 < … < iK <= N。如:对于序列(1, 7, 3, 5, 9, 4, 8),有它的一些上升子串,如(1, 7), (3, 5, 9)等等。这些子串中最长的长度是3,比如子序列(3, 5, 9).
2020-07-24 21:27:34
803
1
原创 贪心——「一本通 1.1 练习 2」数列分段
「一本通 1.1 练习 2」数列分段一、题目题目链接:数列分段二、解题思路虽然题目标注的是贪心,但是,我觉得,用动态规划可能会更简单一点。【数学建模】令dp[i]代表从1开始到第i个结束最少要分成的段数。n=5,m=6。A数组下标dp数组411221432543153ans=dp[n]=3【状态方程】如果sum+A[i]<=m,则dp[i]=sp[i-1];sum+=A[i];否则,dp[i]=dp[i-1
2020-07-24 20:27:40
193
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人