![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
qq_52051345
博客转移至www.acming.net和51codefly.com
展开
-
错排公式
某君写了 n 封信,并且有 n 个信封,如果所有的信都装错了信封,那么会有多少种不同的情况?题解:设 n 封信,所有信都装错的情况为 Fn 。所以当添加第 n 封信的时候,我们可以直接想到,这封信与前 n - 1 封信中的一封放错,那么我们就有 n - 1 种选择。所以我们就可以得到Fn−1 ×(n−1)种情况。这个时候仿佛已经是最后的答案了,但是我们如果仔细想的话,我们会发现我们疏漏...原创 2019-02-25 19:17:03 · 647 阅读 · 0 评论 -
最长上升子序列
先确定动态规划的状态,这个问题可以用序列某一项作为结尾来作为一个状态。用dp[i] 表示一定以第 i 项为结尾的最长上升子序列。用a[i]表示第 i 项的值,如果有j < i且a[j] < a[i],那么把第 i 项接在第 j 项后面构成的子序列长度为: dp[i] = dp[j] + 1。要使dp[i]为以i结尾的最长.上升子序列,需要枚举所有满足条件的j。所以转移方程是:dp[...原创 2019-02-26 21:08:16 · 94 阅读 · 0 评论 -
最大连续子序列和
举例描述以- 2,11,-4, 13,- 5, - 2为例。刚开始ans和sum均为0。到达-2时,sum+(-2)< 0,置sum为0,不更新ans。到达l1时,sum+11>0,置sum为11,更新ans为11。到达-4时,sum+(-4)>0,置sum为7,不更新ans。到达13时,sum+13>0,置sum为20,更新ans为20。到达一5时,sum ...原创 2019-02-26 20:48:37 · 99 阅读 · 0 评论 -
实现多维状态转移
题目描述:如图所示,其中图上的每个点都会有一个体力消耗值。从 0,0,0 到 x,y,z 的最少消耗的体力是多少?题解:我们用f[i[j][k]来表示蒜头君当前所在位置,我们可以知道蒜头君是一步到达这个位置的。 我们可以知道蒜头君每次移动只会更改i,j,k的一个值。这个时候我们就可以知道当前位置会来自f[i-1][i][k],f[i][j- 1][k],f[i][j][k- 1]这三个位置...原创 2019-02-26 18:43:24 · 262 阅读 · 0 评论 -
数组分组
一个长度为 n 的数组 a,我们可以把它分成任意组,每一组是一段连续的区间。比如数组1,2,3,4,5 可以分成 (1,2),(3,4,5) 两组。每个分组都有一个权值,这个权值就是分组里面每个数的乘积对1000 取模的结果。对于数组 a 的一个分组方案,总权值就是每个分组的权值和。那么对于数组 a,分组以后最大的权值和是多少?输入格式输入第一张一个整数 n(1≤n≤1000)。接下来一行 ...原创 2019-03-02 13:35:27 · 4264 阅读 · 0 评论 -
一维消消乐
一维消消乐是一款非常简单的游戏。有 n 颗珠子排成一排,每一颗珠子有一个价值 wi(可能是负数)。游戏是这样,你可以选择如若干对相邻的珠子,让他们同时消去。每一对珠子的消失,都会使得总分数加上两颗珠子相乘的分数。注意,每个珠子只能消一次,并且珠子消去以后,还会占位。输入格式输入第一行一个整数n(1≤n≤10000)。接下来一行输入 n 个整数 (−1000≤ wi ≤1000)。输出格式...原创 2019-03-02 12:32:56 · 2612 阅读 · 0 评论 -
动态规划入门
蒜头君要回家,已知蒜头君在左下角(1,1)位置,家在右上角(n,n)坐标处。蒜头君走上一-个格子(i, j)会花费- -定的体力aij,而且蒜头君只会往家的方向走,也就是只能往上,或者往右走。蒜头君想知道他回到家需要花费的最少体力是多少。:例如下图所示,格子中的数字代表走上该格子花费的体力:对于该图来说,最优策略已在图上标出,最少花费体力为: 3+2 +4+3= 12。我们把走到一个点看做...原创 2019-02-26 12:52:29 · 206 阅读 · 0 评论 -
逃生
蒜头君在玩一款逃生的游戏。在一个 n×m 的矩形地图上,蒜头位于其中一个点。地图上每个格子有加血的药剂,和掉血的火焰,药剂的药效不同,火焰的大小也不同,每个格子上有一个数字,如果格子上的数字是正数说明是一个药剂代表增加的生命值,如果是负数说明是火焰代表失去的生命值。蒜头初始化有 v 点血量,他的血量上限是 c,任何时刻他的生命值都不能大于血量上限,如果血量为 0 则会死亡,不能继续游戏。矩形地图上...原创 2019-03-01 20:03:46 · 141 阅读 · 0 评论 -
蒜头君的新游戏
工作空闲之余,蒜头君经常带着同事们做游戏,最近蒜头君发明了一个好玩的新游戏:n 位同事围成一个圈,同事 A 手里拿着一个兔妮妮的娃娃。蒜头君喊游戏开始,每位手里拿着娃娃的同事可以选择将娃娃传给左边或者右边的同学,当蒜头君喊游戏结束时,停止传娃娃。此时手里拿着娃娃的同事即是败者。玩了几轮之后,蒜头君想到一个问题:有多少种不同的方法,使得从同事 A 开始传娃娃,传了 m 次之后又回到了同事 A 手里。...原创 2019-03-01 18:35:10 · 101 阅读 · 0 评论 -
弹簧板
有一个小球掉落在一串连续的弹簧板上,小球落到某一个弹簧板后,会被弹到某一个地点,直到小球被弹到弹簧板以外的地方。假设有 n 个连续的弹簧板,每个弹簧板占一个单位距离,a[i] 代表代表第 i 个弹簧板会把小球向前弹 a[i] 个距离。比如位置 1 的弹簧能让小球前进 2 个距离到达位置 3。如果小球落到某个弹簧板后,经过一系列弹跳会被弹出弹簧板,那么小球就能从这个弹簧板弹出来。现在希望你计算出小...原创 2019-03-01 18:11:00 · 481 阅读 · 1 评论 -
二维递推
一、杨辉三角: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1递推公式:f[i][j] = f[i-1] + f[i - 1][j]。二、象棋A点有一个过河卒,需要走到目标B点。卒行走规则:可以向下、或者向右。...原创 2019-02-25 19:39:30 · 877 阅读 · 0 评论 -
最长公共子序列
最长公共子序列:给定两个序列S1和S2,求二者公共子序列S3的最长的长度。有了前面的基础,可以发现这个问题仍然可以按照序列的长度来划分状态,也就是S1的前i个字符和S2的前j个字符的最长公共子序列长度,记为lcs[i[j]。如果S1的第i项,和S2的第j项相同,那么S1[i]与S2[j]作为公共子序列的末尾,则lcs[i][j]= lcs[i-1][j-1]+1也可以不让S1[i]与S2[...原创 2019-02-26 21:37:35 · 161 阅读 · 0 评论