- 博客(13)
- 收藏
- 关注
原创 贪心:POJ2376
题目: 给定一个时间T和N个时间区间,求最少需要多少个区间覆盖总区间[1,T],无法覆盖区域[1,T]时输出-1。 例如T=10,有3个区间[1,7],[3,6],[8,10],则最少需要两个区间来覆盖,选择区间1和区间3。这里我仅仅给出最重要的原理:首先,选择的起始区间必须是从1开始的。如果没有,就不能成功覆盖。然后,我们该选择到哪一个时间节点结束的区间呢?
2015-05-21 09:36:56
541
原创 贪心算法:区间调度
问题描述:有n项工作,每项工作分别在si开始,ti结束。对每项工作,你都可以选择参加或不参加,但选择了参加某项工作就必须至始至终参加全程参与,即参与工作的时间段不能有重叠(即使开始的时间和结束的时间重叠都不行)。问最多可以参与多少工作呢?贪心思想:每次选择最早结束的。 思想很容易得到,但这是为什么呢? 首先,该算法选出的区间是互不重叠的。 其次,设fi为该算法所接受的第i个
2015-04-08 22:45:30
822
原创 BFS:迷宫的最短路径
宽度优先搜索思想:宽度优先搜索总是先搜索目前距离初始状态最近的状态。对于同一个状态,宽度优先搜索只经过一次。问题重述:给定一个大小为N*M的迷宫。迷宫由通道和墙壁组成,每一步都可以向相邻的上下左右四格的通道移动。请求出从起点到终点所需的最小步数。请注意,本题假定从起点一定可以移动到终点。代码:#include#include#include#define MAX_N 12
2015-04-08 22:14:00
1093
原创 DFS:Lake Counting POJ 2386
题目大意:有一个大小为N*M的园子,雨后积起了水。八连通的积水被认为是连接在一起的。请求出院子里共有多少水洼?样例10 12W........WW..WWW.....WWW....WW...WW..........WW..........W....W......W...W.W.....WW.W.W.W.....W..W.W......W...W.......W.
2015-04-08 22:01:45
671
原创 贪心算法:硬币问题
硬币问题问题描述:有1元,5元,10元,50元,100元若干枚,现在要用这些硬币来支付A元。最少需要多少枚硬币呢?假设至少存在一种方案。贪心思想:很正常的想,我们自然想要先用100块,直到不能再用,然后用50元。依次进行下去。正确性: 不妨我们假设利用贪心思想得到的各个硬币的使用个数为a1,a2,a3,a4,a5.现假设有更少的选择,不妨设为b1,b2,b3,b4,b5
2015-04-08 12:54:00
1265
原创 动态规划篇:钢条切
钢条切割方案数这里我们认为如果两次切割之后得到的钢条数量和长度一样的话,就算是一种切割。故我们不妨按照长度非递减序列进行切割。则原问题可以转化为然后可以利用分类的方法进行递推。个人分析刻画最优解的结构特征。首先,我们可以知道,对于任何一个给定的钢条来说,对它进行划分的数量是有限的,因此,必然存在最优分割
2015-04-01 18:12:13
563
原创 动态规划算法笔记
动态规划算法笔记如何设计一个动态规划算法? 一般有如下四个步骤: 刻画一个最优解的结构特征。递归地定义最优解的值。计算最优解的值,通常采用自底向上的方法。利用计算出的信息构造一个最优解。动态规划的一些特征记忆化存储,对一个子问题不进行多次计算,典型的时空权衡(time-memory trade-o
2015-04-01 12:38:09
354
原创 动态规划:矩阵链的乘法
矩阵链的乘法矩阵相乘的基本伪代码MATRIC-MULTIPLY(A,B)if (A.columns!=B.rows) error"incompatible dimensions";else let C be a new A.rows*B.columns matrix for i=1 to A.rows for j=1 to B.columns C[i][j]=0;
2015-03-31 20:45:36
374
原创 循环不变式的特征
循环不变式初始化:循环的第一次迭代之前,它为真。保持:如果循环的某次迭代之前它为真,那么下次迭代之后仍为真。终止:在循环终止时,不变式为我们提供了一个有用的性质,该性质有助于证明算法是正确的。
2015-03-28 18:36:50
483
原创 NP完全问题的特殊性
第一,迄今为止,不曾 找到一个对NP完全问题有效的算法,但是也没有人可以证明NP完全问题不存在有效算法;第二,如果一个NP完全问题存在有效解法,那么所有的NP完全问题都存在有效的算法。这一点着实令人吃惊。第三,有些NP完全问题类似于一些已经有有效算法的问题。
2015-03-28 16:42:13
435
原创 归并排序算法
MERGE(A,p,q,r) n1=q-p+1; n2=r-q; for(i=1;i<=n1;i++) L[i]=A[p+i-1]; for(i=1;i<=n2;i++) R[i]=A[q+i]; L[n1+1]=MAX; R[n2+1]=MAX; i=j=1; for(k=p;k<=r;k++) { if(L[i]<R[j]) { A[k]=L[i];
2015-03-11 23:03:00
312
原创 选择排序算法
for i=1 to( A.length-1)flag=ifor j=i+1 to A.lengthif A[j]flag=jif (flag!=i)swap(A[i],A[flag])
2015-03-11 22:45:14
339
原创 插入排序伪代码
INSERT-SORT#includeint a[200];void Insert_sort(int n){ int j,key,i; for(j=1;j<n;j++) { key=a[j]; i=j-1; while(i>=0 && a[i]>key) a[i+1]=a[i--]; a[i+1]=key; }}int main(){ int n,i
2015-03-11 22:28:30
972
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人