上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 21 下一页
摘要: 很老的一个连线不相交问题,左边的点已经有序,直接对右边的对应坐标求最长不降序列即可,数据较大,需要用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) 编辑
摘要: 有一个圆上有n个点,有m个要求,分别是(a,b)表示a与b要联通,每个点只能和它左右的点连线,问最少连多少个线段(相邻两点之间连的一条线算1条线段)。最多要连n-1条线,整个圆上的点都联通,所以枚举不连哪一条线段,算出此时最小的线段数即可。算的时候用next[i]记录i点向后连边的终点,求和的时候就能很快了。View Code 1 {$inline on} 2 program pku1944(input,output); 3 type 4 node = record 5 x,y : integer; 6 end; 7 var 8 ... 阅读全文
posted @ 2012-03-29 10:59 Codinginging 阅读(258) 评论(0) 推荐(0) 编辑
摘要: 有6种面值的货币,最小的是1,求出用最少的货币数凑成1..100的最少货币数,输出其中的最大值和他们的平均值。而可以用减法。例如:6=1+2+3,6=7-1,那么凑成6的最小货币数为2.是一个没有下限的背包问题,体积数组开到3000+就可以了(经过试验了)。View Code 1 program pku1252(input,output); 2 var 3 f : array[-3000..3000] of longint; 4 v : array[1..6] of longint; 5 cases,e : longint; 6 procedure ... 阅读全文
posted @ 2012-03-28 16:20 Codinginging 阅读(289) 评论(0) 推荐(0) 编辑
摘要: 给你两个串A,B,可以得到从A的任意位开始的子串和B匹配的长度。 给定K个询问,对于每个询问给定一个x,求出匹配长度恰为x的位置有多少个。 N,M,K<=200000字符串的处理,用KMP喽,首先求出模式串B的next[],然后进行一遍AB匹配,记录a[i]匹配的最大长度,那么如果a[i]可以匹配l[i]的长度,answer[i]表示匹配长度为i的串的数量,则answer[next[i]]的匹配长度也是满足answer[i]的,所以只要倒着循环一遍,把answer[next[i]]加到answer[i]中即可。这时的answer[i]包含了长度为i+1的情况,所以要输出answer[k] 阅读全文
posted @ 2012-03-27 15:27 Codinginging 阅读(560) 评论(0) 推荐(0) 编辑
上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 21 下一页