摘要: 给一个n个数的排列,求其向后k个的排列。这里有一种字典序模拟法。1:找到最靠后的x,使a[x]<a[x+1]2:找到最小的a[y],使a[y]>a[x]3:交换a[x],a[y]4:把序列(x+1..n)翻转。每进行一次上述过程,就向下推了一个排列。View Code 1 program pku1833(input,output); 2 var 3 a : array[0..2000] of longint; 4 n : longint; 5 k : longint; 6 cases : longint; 7 procedure init; 8... 阅读全文
posted @ 2012-04-01 14:41 Codinginging 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 很老的一个连线不相交问题,左边的点已经有序,直接对右边的对应坐标求最长不降序列即可,数据较大,需要用nlogn的二分法。View Code 1 program pku1631(input,output); 2 var 3 q : array[0..60000] of longint; 4 top : longint; 5 n : longint; 6 a : array[0..50000] of longint; 7 cases : longint; 8 procedure init; 9 var10 i : longint... 阅读全文
posted @ 2012-04-01 10:16 Codinginging 阅读(137) 评论(0) 推荐(0) 编辑
摘要: 有n只奶牛进行自行车环跑,如果奶牛一分钟要跑x圈,则领跑者消耗x*x体力,后面跟跑的消耗x体力。现在给出N头奶牛的数目N,每头奶牛原先所具有的能量E,需要环跑的圈数D。只要有一只奶牛先达到D圈,就算完成环跑,求奶牛能否完成环跑,如果不能,输出0。否则,输出环跑的最短时间。最优方案显然是n头牛轮流领跑,最后第n头牛冲线。f[i,j,k]表示当前第i头牛领跑,已经领跑j圈,它已经消耗了k点体力的最短时间。写一个正推方程f[i,j+x,k+x*x]=min{f[i,j,k]+1}//领跑牛继续跑 f[i+1,j,j]=min{f[i,j,k]}//领跑牛换人View Code 1 program . 阅读全文
posted @ 2012-04-01 08:50 Codinginging 阅读(379) 评论(0) 推荐(0) 编辑