摘要:
就是求个逆序对,基础编程能力还是要有的,交这个题时很囧。PKU也有不给力的时候啊!View Code 1 program merge_sort(input,output); 2 var 3 a,x : array[0..2000] of longint; 4 n,answer : longint; 5 cases,v : longint; 6 procedure init; 7 var 8 i : longint; 9 begin10 read(n);11 for i:=1 to n do12 read(x[i]);13 ... 阅读全文
摘要:
求一个图的最小生成树,其中某些边不收费(可以这样理解)。这次用kruscal打的,对于不收费的边先全部加入,再维护即可。View Code 1 program pku2421(input,output); 2 var 3 father : array[0..200] of longint; 4 f : array[0..200,0..200] of longint; 5 x,y,w : array[0..40000] of longint; 6 n,m,q,answer : longint; 7 procedure ini... 阅读全文
摘要:
给定一个序列,每次可取出一段任意长度的序列插到某个位置,问至少多少次操作能让序列变为1.2.3.4......n。如果步数超过4,输出“5 or more”可以用双向BFS,但编程复杂度较高,用迭代加深就需要动一点脑筋想强剪枝。题目的最终状态是1 2 3 4 5 6 7 8,则严格递增序列为1。所谓严格递增即是说1 2 3 4 5 6,这些,而2 5,2 4 6,这种只能称之为递增,那么1 2 5 6 3 4 7 8的严格递增序列有4个,而每次操作最多一次减少3个非严格递增序列,所以有这个剪枝:if 当前递增序列个数-3*(最大深度-当前深度)>=0 then exit加入这个剪枝不一定 阅读全文