自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(8)
  • 收藏
  • 关注

转载 ACM基本算法分类、推荐学习资料和配套pku习题

一.动态规划参考资料:刘汝佳《算法艺术与信息学竞赛》《算法导论》推荐题目:http://acm.pku.edu.cn/JudgeOnline/problem?id=1141 简单http://acm.pku.edu.cn/JudgeOnline/problem?id=2288 中等,经典TSP问题http://acm.pku.edu.cn/JudgeOnline

2008-09-09 20:27:00 1551 2

原创 PKU 3368 Frequent values

 题目大意:给出N个数,另有p人问题,每次要求是求出a和b之间出现最多的次数。因为此题目并没有插入删除或修改操作,那就可以用RMQ来做(当然线段树也可以,我会的RMQ也仅仅是最白痴的RMQ),将原来的数列改成出现次数的数列,如 -1 -1 1 1 1 1 3 10 10 10 改成 2 2 4 4 4 4 1 3 3 3,另外再设一个left和right数组,保存每个数与之相同的最左和最右

2008-09-18 19:43:00 896

原创 PKU 3254 Corn Fields

 题目大意:在M*N的土地上种植玉米,有些地方不能种植,而且相邻两个不能都种。思路:状态压缩dp(比炮兵阵地简单)。将每一排的N个看成一个N位2进制数,初始化的时候可以去掉很多无效的状态(如110..),然后dp,当前有效状态和上一行有效状态的关系。 #include  struct Line{    int num;    int state[1024];// 

2008-09-15 18:34:00 671

原创 PKU 3255 Roadblocks

 题目要求次短路径,每条路可以走多次。本题的实现方法是分别对1和n进行两次Dijkstra,然后枚举边,产生新的一条路,即两点分别到1和n的距离和加上这条边的距离。如果这样计算后不存在次短路径,那么答案就是 (最短路径+2*最短的边长)。 #include  const int R = 100000+5;const int N = 5000+ 5;const int

2008-09-15 18:26:00 775

原创 PKU 3623 Best Cow Line, Gold

题目要求每次从头或从尾取一个字母,要求最后的结果字典序最小。本题可以用暴力过,设置两个指针i j,比较s[i] s[j],不同则选小的,相同则再比较s[i+1] s[j-1]。。。。依此类推。另一种方法是采用后缀数组,将比较的过程优化。先将原来的串正向反向连接起来( abc变成abc#cba),然后利用后缀数组初始化,需要比较的时候利用RMQ来读取不同的字母。 #include

2008-09-15 12:20:00 795

原创 PKU 1743 Musical Theme

 题目要求最长不重叠的长度相同的子串长度,使得对应的差为定值。先用后缀数组求出h数组(h[i] = LCP(i-1,i) (LCP是最长公共前缀)),但由于这题目要求子串间不能重叠,因此采用二分答案的方法,根据排序好的相邻后缀的关系,比较它们之间的距离差是否大于答案即可。下面程序中RMQ部分没有调用,本题不需此内容。 #include  #include  #i

2008-09-15 11:48:00 966

原创 PKU 2513 Colored Sticks

 trie树+并查集+欧拉回路 用trie树将字符串一一映射(貌似用hash也行), 用并查集判断图是否联通,然后判断是否存在欧拉回路(不要以为回路不符合题意,其实只要拉直就好了),即度为奇数的点有两个或没有。 #include  const int N = 250000 + 5;int fa[N*2]={0};int num;struct Node{

2008-09-14 18:55:00 561

原创 pku 3083 Children of the Candy Corn

 题目要求沿左墙壁、有墙壁和最短路程分别多少。一开始不清楚怎么实现沿左(右)墙壁。后来实现方法是:在当前方向上,先看是否能向左(右)走,不行则继续向前,还不行就继续顺时针(逆时针)选择方向。 #include  #include  int right[4][2] = { {1,0},{0,1},{-1,0},{0,-1} };int left[4][2] = {

2008-09-14 18:38:00 1149

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除