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

浙公网安备 33010602011771号