摘要: 有两台机器A,B,分别有n,m个进程,有k个任务,每个任务要么在A的x进程上完成,要么在B的y进程上完成,但机器换进程要时间,求完成方案下的最短时间。最小覆盖问题,通式:方案有两个,作为二分图的对立点,而任务为点,完成每一个任务的两种方案连边,求最大匹配即可,因为“最小覆盖=最大匹配”很不理解输入里面的那个i有什么用??View Code 1 program pku1325(input,output); 2 var 3 f : array[0..201,0..201] of boolean; 4 lk : array[0..201] of longint; 5 ... 阅读全文
posted @ 2012-03-04 17:31 Codinginging 阅读(169) 评论(0) 推荐(0) 编辑
摘要: 有两个长度为N的序列A和B,在A和B中各任取一个数相加可以得到N^2个和,求这N^2个和中最小的N个。把a,b数组排序后,用pos[i]表示当前与a[i]取得未取最小值的b[j]的编号j,也就是说pos[i]=k{a[i]+b[k]-->min}每次取min{a[i]+b[pos[i]]}输出,再将pos[i]加一即可,这个算法是n^2的,进一步思考,取一堆数中的最小值,可以用堆维护,nlognView Code 1 {为方便heap中存编号而不是具体值} 2 program sequence(input,output); 3 var 4 a,b,pos : array[0..... 阅读全文
posted @ 2012-03-04 16:54 Codinginging 阅读(586) 评论(0) 推荐(0) 编辑
摘要: 给出1~n的一个排列,统计该排列有多少个长度为奇数的连续子序列的中位数是b。中位数的定义可以转化为在序列中大于它和小于它的数的个数相等。序列总数就是以它为左端点的+以它为右端点的+它不做端点的怎么求看代码View Code 1 program median(input,output); 2 var 3 f,a : array[-100000..110000] of longint; 4 n,i,x : longint; 5 max,pos,answer : longint; 6 begin 7 assign(input,'median.in... 阅读全文
posted @ 2012-03-04 15:35 Codinginging 阅读(352) 评论(0) 推荐(0) 编辑
摘要: 给一个有向图,顶点数少于50,有Q条询问(Q<=100000),对于每条询问(x1 y1),输出他们之间的最小密度路径的密度(长度比边数)两种实践方法,一个是FLOYD,再就是二维SPFA,注意数据有环,SPFA时要控制边数少于n才行,至于为什么,是困扰几代人的烦恼了。d[i,j,k]表示从i到j走过k条路径的最小路径长度floydView Code 1 program path(input,output); 2 var 3 i,j,k,l,m,n,w,p,x,y:longint; 4 max,tmp:real; 5 f:array[0..51,0..51,0..51] of... 阅读全文
posted @ 2012-03-04 15:29 Codinginging 阅读(440) 评论(0) 推荐(0) 编辑
摘要: 这道题真是没法说,时间限制是5000ms,而且矩形数还少于5000,O(n^2)枚举即可啊!!View Code 1 program pku1468(input,output); 2 type 3 node = record 4 x1,y1,x2,y2 : longint; 5 end; 6 var 7 a : array[0..5001] of node; 8 answer,n : longint; 9 function cover(x,y :longint ):boolean;10 begin11 if (a[y]... 阅读全文
posted @ 2012-03-01 11:55 Codinginging 阅读(168) 评论(0) 推荐(0) 编辑