摘要: 每个ai都有一个值,里面是选的第几个人或者第几项工作,由于人和工作都是n,人分配给工作,工作分配给工作都一样。 这里用人分配给工作的理解。其实这题的剪枝函数十分简易,就是用count来代表当前的花费,如果c大于当前最优的花费,就剪枝。如果小于就继续,树的深度代表工作编号,x[i]代表这个人有没有被分 阅读全文
posted @ 2018-12-23 20:15 荷里活DJ 阅读(101) 评论(0) 推荐(0) 编辑
摘要: 1.回溯法的理解: 回溯法实质上就是穷举法,不过加上了约束函数和限界函数,比如有些步骤进行到一半发现结果已经不可能符合条件就舍去,还有些符合条件但是进行到发现这不是最优解的时候就可以舍弃,就是通过这样的方式来将穷举法一步一步优化,回溯法主要两种算法框架,一种是子集树,另一种是排列树。回溯法解题的关键 阅读全文
posted @ 2018-12-23 20:08 荷里活DJ 阅读(85) 评论(0) 推荐(0) 编辑
摘要: 1. 删数问题 2. 给定n位正整数a,去掉其中任意k≤n 个数字后,剩下的数字按原次序排列组成一个新 的正整数。对于给定的n位正整数a和正整数 k,设计一个算法找出剩下数字组成的新数最 小的删数方案。 3. 贪心算法策略是每次删除一个数字,都要保证删除后这个数是当前最小的,就是说如果要删除4个数字 阅读全文
posted @ 2018-11-29 23:04 荷里活DJ 阅读(102) 评论(0) 推荐(0) 编辑
摘要: 1. 我觉得贪心算法就是从局部出发,每一步都是求当前状况的最优解,就是最优子结构性质,不过重点是找出最优解的方法。例如,会场安排问题:选出最早结束的场次。 2. 汽车加油问题,就是如果每一程的都能走的话,就是每一程都小于或等于满油能走的路程,就可以开始贪心算法了,核心是一开始满油的汽车开始走,走到每 阅读全文
posted @ 2018-11-29 23:03 荷里活DJ 阅读(103) 评论(0) 推荐(0) 编辑
摘要: 2.第一题用到了最长公共子序列的方法: 第二题: 定义f[i][j]为站点i到站点j的最少租金: f[i][j] = min { f[i][k] + f[k][j] } 其中 i<k<j, 0<=i,j<=n-1 则最少租金为 f[0][n-1] 3.编程期间,没有遇到什么很大的问题,就是解题第一步 阅读全文
posted @ 2018-11-04 14:53 荷里活DJ 阅读(118) 评论(0) 推荐(0) 编辑
摘要: 实践报告任选一题进行分析。内容包括: 1.实践题目:编辑距离问题 2.问题描述:设A和B是2个字符串。要用最少的字符操作将字符串A转换为字符串B。这里所说的字符操作包括 (1)删除一个字符; (2)插入一个字符; (3)将一个字符改为另一个字符。 将字符串A变换为字符串B所用的最少字符操作数称为字符 阅读全文
posted @ 2018-11-01 09:48 荷里活DJ 阅读(103) 评论(0) 推荐(0) 编辑
摘要: 实践报告 第一题 2.问题描述 输入n值(1<=n<=1000)、n个非降序排列的整数以及要查找的数x,使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。 3.算法描述 二分查找算法关键是下标的mid、left、right的变化,开始是left=0和r 阅读全文
posted @ 2018-10-14 10:01 荷里活DJ 阅读(119) 评论(0) 推荐(0) 编辑
摘要: 1.二分法基本思想: 二分法衍生出来有二分查找法,二分排序法,二分合并法等,像二分查找法,设R[low,high]是当前的查找区间,然后找出中间值mid,然后每次利用待查找值和mid相比较,直接去可能存在待查找值得区间去找,就避免浪费时间在不可能存在的区间去找,大大减少了运行时间。接着,二分法思想还 阅读全文
posted @ 2018-10-09 09:48 荷里活DJ 阅读(236) 评论(0) 推荐(0) 编辑