![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
Reinen
这个作者很懒,什么都没留下…
展开
-
LIS专题(板子)
引言不知道为啥上次放在LCS最后的LIS转LCS的方法在上机题中WA掉了,匆忙之下复制粘贴了别人的板子,感觉很罪恶,还是得自己总结一下属于自己的板子O(n 2)分析:我们假设dp[i]表示以arr[i]结尾的最长上升子序列的长度,那么dp[i]就有可能从任何满足 arr[j] < arr[i] 的dp[j]转移来,只需在dp[i]和dp[j] + 1之间取最大值就好了,而这只是对于a...原创 2019-11-01 11:51:38 · 241 阅读 · 0 评论 -
最优二叉搜索树(板子)
引言写完矩阵链相乘问题接着写最优二叉搜索树问题,感觉在动态规划方程的结构上二者并没有太多的本质区别,但是最优二叉搜索树问题难在方程的推导过程,并且还有辅助数组。输入第一行为一个数n,表示有n个关键字第二行为n个数,表示这n个关键字的权重第三行为n + 1个数,表示n + 1个伪关键字的权重输出最优二叉搜索树的搜索期望,即所有结点值与对应权重(深度 + 1)的乘积的和值动态转移方程...原创 2019-10-30 17:09:49 · 225 阅读 · 0 评论 -
矩阵链相乘问题(板子)
引言矩阵链相乘问题也是动态规划中十分经典的问题,与之前遇到的动态规划问题略有不同的地方是循环顺序的设置,在后面会提到。输入一个数n,表示有n个矩阵相乘之后一行是n + 1个数,表示这n个矩阵的行列信息如:310 30 5 60表示有3个矩阵相乘,分别为10 × 30,30 × 5,5 × 60的矩阵void scan(){ for(int i = 0;i <= n;...原创 2019-10-30 15:51:16 · 724 阅读 · 0 评论 -
树形DP-C2-与非门
题面数字电路中有一种基本逻辑电路叫做与非门,它有两个输入和一个输出。如下图:现在将n个与非门拼接到一起,形成了一个形如二叉树的电路,如下图:两个与非门相连表示一个与非门的输出作为另一个与非门的输入。不与与非门相连的部分表示外部输入,可能是0或者1。也就是说所有子节点数不为2的节点都会连一个外部输入,自底向上处理,最后从根节点输出,保证根节点编号为1.由于外界的干扰,有一些与非门损坏,只...原创 2019-10-27 16:50:50 · 420 阅读 · 0 评论 -
LCS与LIS(板子)
LCS最长公共子序列问题,十分经典,最简单的状态转移方程(板子)为:void LCS_1(){ for(int i = 1;i <= n;i++){ for(int j = 1;j <= m;j++){ if(x[i - 1] == y[j - 1]){ lcs[i][j] = lcs[i - 1]...原创 2019-10-24 08:43:23 · 324 阅读 · 0 评论 -
状态压缩DP
(十分难受,写了半天的题解就因为粘了一段太长的代码,啥都没了,又得重写,,烦人)先看题目题目描述阿姆斯特朗回旋加速式阿姆斯特朗炮是一种非常厉害的武器,这种武器可以毁灭自身同行同列两个单位范围内的所有其他单位(其实就是十字型),听起来比红警里面的法国巨炮可是厉害多了。现在,零崎要在地图上布置一片阿姆斯特朗回旋加速式阿姆斯特朗炮,那么在N行M列单位长度大小的地图上,求解阿姆斯特朗回旋加速式阿姆斯...原创 2019-10-23 23:23:22 · 106 阅读 · 0 评论 -
流水线调度问题
两条流水线这是最开始学到的,两条流水线问题,然后有具体的一条线路的第i个站移动到另一天线路的第i + 1个站需要的时间,较为简单,简要介绍一下思路:对于到达某条线路上的某个站时,已花费的最短时间dp[i],可以是同一条线路的i - 1站直接过来(没有换线路)也可以是从另一条线路的i - 1站转换过来,取其中较小的即可可以列出下面的转移方程:dp_first[i] = min(dp_firs...原创 2019-10-17 18:02:29 · 1140 阅读 · 0 评论 -
钢管切割问题
问题重现在钢管切割的背景下,已经知道长度为1−n的钢管的价值,给定长度为n的钢管在切割若干次(也可以不切割)所带来的最小价值(最大价值)是?问题分析钢管切割问题大家都不陌生,这里就不具体举出某个例子了。具体的思路就是用dp[i]记录当总长度为i时的最小(最大)价值,即dp[i] = min{p[i] + dp[i - j]}(j : 1 ➡ i)代码int bottm_up_cut_r...原创 2019-10-17 17:01:12 · 1483 阅读 · 0 评论 -
多重集组合数问题
问题举例有n种物品, 第i种物品有a个. 不同种类的物品可以互相区分, 但相同种类的无法区分.从这些物品中取出m个, 有多少种取法? 求出数模M的余数.例如: 有n=3种物品, 每种a={1,2,3}个, 取出m=3个, 取法result=6(0+0+3, 0+1+2, 0+2+1, 1+0+2, 1+1+1, 1+2+0).分析考虑动态规划的办法,设d[i][j]为取第i种数长度...原创 2019-10-17 16:25:01 · 493 阅读 · 0 评论 -
股票问题板子
股票问题中较简单的,如k = 1,可以有其他暴力的方法,在这里总结一种通用的股票问题板子,供一起学习,同样,在末尾会有的博客链接以供理解在开始之前先说明几个变量:int prices[maxn];每支股票的价格long long dp[maxn][maxn][2];//三维DP数组,维度分别为天数、允许最大交易数、持有股票状态(0无1有)int n,max_k;//分别为股票个数和允许最大...原创 2019-10-16 23:14:22 · 129 阅读 · 0 评论 -
背包问题板子
背包问题是DP中最基础的问题,其中有许多变式,此文仅提供板子 ,在文章末尾会附上自认为不错的背包九讲文章链接,以供进一步理解,在开始之前先说明几个变量:dp[MAX],v[MAX],w[MAX],c[MAX]分别代表DP数组,重量,价值,多重背包问题中物品的最大可取数量(将v和w的含义调换了一下,没大问题)V,n表示背包容量和物品种数01背包问题void zero_one_pack(...原创 2019-10-16 22:42:49 · 309 阅读 · 0 评论 -
C1-2018级算法第一次上机A题题解
冒泡排序(信助教的鬼话)上机心路历程啊冒泡排序。。。那我就模拟,每次记录交换次数,最后输出结果就好了,冒泡排序,直接打板子。几分钟后。。。我去怎么还是TLE,我明明用了flag判断当没有发生交换时就退出循环,即使O(n2)也应该擦擦边过掉吧。百思不得其解。。。上机前似乎看到比赛简介中写:归并排序。对了!!!冒泡排序交换的过程,其实就是消除逆序对的过程呀,而且想想似乎是一对一的关系,有多少...原创 2019-10-11 21:02:52 · 248 阅读 · 0 评论