算法
lilinjian2001
创造生活
展开
-
一、数论算法
1.求两数的最大公约数 function gcd(a,b:integer):integer;begin if b=0 then gcd:=a else gcd:=gcd (b,a mod b);end ; 2.求两数的最小公倍数 function lcm(a,b:integer):integer;begin if a lcm:=a; while lcm mod b>转载 2006-09-12 09:39:00 · 1012 阅读 · 0 评论 -
四、排序算法
1.快速排序: procedure qsort(l,r:integer); var i,j,mid:integer; begin i:=l;j:=r; mid:=a[(l+r) div 2]; {将当前序列在中间位置的数定义为中间数} repeat while a[i] while a[j]>mid do dec(j);{在右半部分寻找比中间数小的数} if i转载 2006-09-12 09:46:00 · 893 阅读 · 0 评论 -
三、背包问题
*部分背包问题可有贪心法求解:计算Pi/Wi 数据结构: w[i]:第i个背包的重量; p[i]:第i个背包的价值; 1.0-1背包: 每个背包只能使用一次或有限次(可转化为一次): A.求最多可放入的重量。NOIP2001 装箱问题 有一个箱子容量为v(正整数,o≤v≤20000),同时有n个物品(o≤n≤30),每个物品有一个体积 (正整数)。要求从 n 个物品中,任取若千转载 2006-09-12 09:45:00 · 758 阅读 · 0 评论 -
十一、回溯法框架
1. n皇后问题 procedure try(i:byte);var j:byte;begin if i=n+1 then begin print;exit;end; for j:=1 to n do if a[i] and b[j+i] and c[j-i] then begin x[i]:=j; a[j]:=false; b[j+i]:=false;转载 2006-09-12 09:53:00 · 823 阅读 · 0 评论 -
十、贪心
*会议问题(1) n个活动每个活动有一个开始时间和一个结束时间,任一时刻仅一项活动进行,求满足活动数最多的情况。解:按每项活动的结束时间进行排序,排在前面的优先满足。 (2)会议室空闲时间最少。 (3)每个客户有一个愿付的租金,求最大利润。 (4)共R间会议室,第i个客户需使用i间会议室,费用相同,求最大利润。转载 2006-09-12 09:53:00 · 811 阅读 · 0 评论 -
九.查找算法
1.折半查找 function binsearch(k:keytype):integer;var low,hig,mid:integer;begin low:=1;hig:=n; mid:=(low+hig) div 2; while (a[mid].key if a[mid].key>k then hig:=mid-1 else low:=mid+1; mid:=转载 2006-09-12 09:52:00 · 707 阅读 · 0 评论 -
七、进制转换
1.任意正整数进制间的互化 除n取余 2.实数任意正整数进制间的互化乘n取整 3.负数进制: 设计一个程序,读入一个十进制数的基数和一个负进制数的基数,并将此十进制数转换为此负 进制下的数:-R∈{-2,-3,-4,....-20}转载 2006-09-12 09:50:00 · 894 阅读 · 0 评论 -
六、 树的遍历
1.已知前序中序求后序 procedure Solve(pre,mid:string);var i:integer;begin if (pre=) or (mid=) then exit; i:=pos(pre[1],mid); solve(copy(pre,2,i),copy(mid,1,i-1)); solve(copy(pre,i+1,length(pre)-i)转载 2006-09-12 09:49:00 · 714 阅读 · 0 评论 -
五、高精度计算
高精度数的定义:type hp=array[1..maxlen] of integer; 1.高精度加法 procedure plus ( a,b:hp; var c:hp);var i,len:integer;beginfillchar(c,sizeof(c),0);if a[0]>b[0] then len:=a[0] else len:=b[0];for i:=1 to len d转载 2006-09-12 09:48:00 · 669 阅读 · 0 评论 -
十四、数据结构相关算法
1.链表的定位函数 loc(I:integer):pointer; {寻找链表中的第I个结点的指针}procedure loc(L:linklist; I:integer):pointer;var p:pointer;j:integer;beginp:=L.head; j:=0;if (I>=1) and (Iwhile jloc:=p;end; 2.单链表的插入操作 procedur转载 2006-09-12 09:58:00 · 759 阅读 · 0 评论 -
十三、BFS框架
IOI94 房间问题head:=1; tail:=0;while tailinc(tail);for k:=1 to n do if k方向可扩展 then begin inc(head); list[head].x:=list[tail].x+dx[k]; {扩展出新结点list[head]} list[head].y:=list[tail].y+dy[k]; 处理新转载 2006-09-12 09:57:00 · 757 阅读 · 0 评论 -
十二、DFS框架
NOIP2001 数的划分 procedure work(dep,pre,s:longint); {入口为work(1,1,n)}{dep为当前试放的第dep个数,pre为前一次试放的数,s为当前剩余可分的总数}var j:longint;begin if dep=n then begin if s>=pre then inc(r); exit; end; for j:=p转载 2006-09-12 09:56:00 · 981 阅读 · 0 评论 -
八、全排列与组合的生成
1.排列的生成:(1..n)procedure solve(dep:integer); var i:integer; begin if dep=n+1 then begin writeln(s);exit; end; for i:=1 to n do if not used[i] then begin s:=s+chr(i+ord(0));us转载 2006-09-12 09:51:00 · 787 阅读 · 0 评论 -
二、图论算法
1.最小生成树 A.Prim算法: procedure prim(v0:integer); var lowcost,closest:array[1..maxn] of integer;i,j,k,min:integer; begin for i:=1 to n do begin lowcost[i]:=cost[v0,i]; closest[i]转载 2006-09-12 09:43:00 · 1040 阅读 · 0 评论 -
奇怪的问题
奇怪的问题请回答下面10个问题,各题都恰有一个答案是正确的:(1)第一个答案是B的问题是哪一个?A、2B、3C、4D、5E、6(2)恰好有两个连续问题的答案是一样的,它们是:A、2,3B、3,4C、4,5D、5,6E、6,7(3)本问题答案和哪一个问题的答案相同?A、1B、2C、4D、7E、6(4)答案是A的问题的个数是:A、0B、1C、2D、3E、4(5)本问题答案和哪一个问题的答案相同?A、1转载 2007-03-09 17:24:00 · 688 阅读 · 0 评论