随笔分类 -  算法作业

摘要:实践题目 工作分配问题 问题描述 有n个人、n个工作,每个人只能做一个工作,每人对应每个工作有一个消费,求完成所有工作的最小消费 算法描述 这里采用回溯法,按顺序给每个人分配工作,如果一件工作已经被分配,打上标记防止被重复分配 分配过程中,如果当前的消费已经大于等于已知的最小消费,就停止对子节点的搜 阅读全文
posted @ 2018-12-23 19:41 Apale 阅读(116) 评论(0) 推荐(0)
摘要:对回溯法的理解 回溯法与dfs很像,区别是:dfs在递归返回时并不会把状态改回历史状态,而回溯法会。 子集和问题的解空间结构和约束函数 子集和问题就是01背包问题,它的解一定是n件物品 每件拿或不拿 的 $2^{n}$ 种状态中的一种。 当时做那道题的时候只用了一个很简单的约束,即对所有数字从小到大 阅读全文
posted @ 2018-12-23 19:33 Apale 阅读(110) 评论(0) 推荐(0)
摘要:实践题目 删数问题 问题描述 删除一个n位长的数字中的k位,要使得删完之后的数最小。 算法描述 首先确定贪心策略。 当一个n位的数减少一位时,无论减少哪一位,得到的一定是一个n 1位的数,因此,优先降低最高位的数能使数字减小得最多。从左到右,如果一个数的下一位比这个数 小,显然应该删除这个数,这样高 阅读全文
posted @ 2018-12-01 23:20 Apale 阅读(123) 评论(0) 推荐(0)
摘要:我对贪心算法的理解 贪心算法在解决问题时总是选择局部最优解,若要求全局最优解,则必须证明问题的局部最优解与全局最优解一致。局部最优解与全局最优解不一致时,也可以用贪心算法逼近全局最优解(往往会比dp和搜索快得多)。 汽车加油问题的贪心选择性质 显然,当汽车从上一个站开到当前站后剩余的油量足够开到下一 阅读全文
posted @ 2018-12-01 22:10 Apale 阅读(112) 评论(0) 推荐(0)
摘要:1. 实践题目 数字三角形 2. 问题描述 给出一个$n$行的由数字组成的三角形,第$i$层有$i$个数字,每步可以向下走或向右下走,问从顶端到底部的路径的最大数字之和是多少。 3. 算法描述 用$dp[i][j]$表示走到第$i$行第$j$列能取得的最大值,显然$dp[i][j]$ = $max( 阅读全文
posted @ 2018-11-10 18:57 Apale 阅读(137) 评论(0) 推荐(0)
摘要:对动态规划的理解(递归解法) 确定递归出口 直接返回已计算过的子问题的解 对于没计算过的问题,用其子问题的解将其算出 7 1 其中$dp[i]$表示前i个数字在包含$a[i]$情况下的最长上升子序列的长度 int solve(int k) { if (dp[k]) return dp[k]; for 阅读全文
posted @ 2018-10-28 21:30 Apale 阅读(188) 评论(1) 推荐(0)
摘要:1、实践题目 7 3 2、问题描述 输入两个长度为$N$的升序有序序列,输出他们归并后的序列的中位数 要求算法时间复杂度为$O(logN)$ 3、算法描述 第一次没仔细审题,写了个$O(N)$的归并,归并到$2(N 1)/2$的地方就输出了。 后来重写了一次,用的是二分的做法,先分别求出两个序列的中 阅读全文
posted @ 2018-10-21 15:49 Apale 阅读(142) 评论(0) 推荐(0)