摘要:
1. 问题 给定n个大小不等的圆c1,c2,…,cn,现要将这n个圆排进一个矩形框中,且要求各圆与矩形的底边相切。圆排列问题要求从n个圆的所有排列中找出由最小长度的圆排列。 2. 解析 这个问题可以通过搜索求出圆的全排列,并且计算排列中每个圆圆心所在横坐标的位置,每个圆心所在的x坐标减去其半径来更新 阅读全文
摘要:
1. 问题 给出一张无向图,有n个点m种颜色,问一条边连接的两个点不能同色,问有多少种染色方式 2. 解析 这里可以用到递归的思想,假设这个点染某一种颜色,判断连接的点是否合法,成功染到第n个点,就是一种合理的方法,在通过回溯,求出所有的方法 3. 设计 这是一个 n=3,m=3,且是一张完全图的搜 阅读全文
摘要:
1. 问题 给出n个数,求出最优前缀码 2. 解析 每次选出两个数,将两个数合并成一个数,查剩下的有序数组,每一次减少一个数,最后的数就是答案 3. 设计 我们可以使用权值线段树,来实现O(logn)的插入以及O(logn)的删除,当然我们也可以使用链表等手段,这里我使用了multiset的c++容 阅读全文
摘要:
1. 问题 给出n个节目,给出每个节目开始时间和结束时间,同一时间段只能播放一个节目,问最多可以播放多少节目 2. 解析 贪心策略是按结束时间从小到大排序,贪心选择和最后一个节目相容的节目,最后得到就是的答案 3. 设计 排序方式 1 struct node { 2 int l,r; 3 bool 阅读全文
摘要:
1. 问题 求两个字符串的最大公共子序列 2. 解析 我们思考一下其实,是个很简单的问题,dp[i][j]//i表示a串到下标i,j表示b串到下标j,dp[i][j]表示当前最大公共子序列 则当a[i]=b[j]时 dp[i][j]=dp[i-1][j-1]+1; 否则dp[i][j]=max(dp 阅读全文
摘要:
1. 问题 给定n个矩阵{A1,A2,…,An},其中Ai与Ai+1是可乘的,i=1,2 ,…,n-1。如何确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。 2. 解析 这其实是个很简单的问题,区间dp模板题,dp[i][j],表示区间i到j合并的最小值,枚举k表示分割点 阅读全文
摘要:
1. 问题 有n个项目,m元钱,dp[x,y]表示第x个项目投资y元钱的效益,问如何投资使效益最大。 2. 解析 这其实是个很简单的问题,第x个项目投资y元,若当前投资额为m元,则他是从第x-1个项目投资额为m-y元转移过来 则dp[x][y]//x表示第x个项目,y表示当前投资额 Dp方程:dp[ 阅读全文
摘要:
1. 问题 给你一个序列让你找出第k大 2. 解析 写出一个快排,选定key,当左区间比他小的数大于k则递归左区间,小于k,则当前k减去小于的值,递归右区间,等于k则这个数就是我们要找的数 3. 设计 int FindKthMax(int*list, int left, int right, int 阅读全文
摘要:
1. 问题 在包含有n个点的集合S中,找出距离最近的两个点。设 p1(x1,y1),p2(x2,y2),……,pn(xn,yn)是平面的n个点。 严格地将,最近点对可能不止一对,此例输出一对即可。 2. 解析 我们先根据x坐标排序,进行递归算出每一部分的距离,在根据y坐标排序计算每一部分之间的最近距 阅读全文
摘要:
1. 问题 对n个不同的数构成的数组A[1..n]进行排序,其中n=2^k; 2. 解析 3. 设计 (1) 将待排序序列从中间一分为二,对左右两边再进行递归分割操作,得到n个相互独立的子序列; (2) 对n个独立的子序列递归的执行合并操作,最终得到有序的序列 4. 分析 将k=logn和W(1)= 阅读全文