- 博客(158)
- 收藏
- 关注
转载 一直以来伴随我的一些学习习惯(part2)
转载自:http://blog.csdn.net/pongba/article/details/2681668 一直以来伴随我的一些学习习惯(part2) By 刘未鹏(pongba) C++的罗浮宫(http://blog.csdn.net/pongba) 接着上次的写。 1. 学习和思考的过程中常问自己的几个问题: 你的问题到底是什么?(提醒自己思考不要偏离问题。) OK
2013-08-08 01:26:14 458
转载 一直以来伴随我的一些学习习惯(四)——程序员的知识结构
转载自:http://blog.csdn.net/pongba/article/details/3456240 一直以来伴随我的一些学习习惯(四)——程序员的知识结构 By 刘未鹏(pongba) C++的罗浮宫(http://blog.csdn.net/pongba) TopLanguage(https://groups.google.com/group/pongba)
2013-08-08 01:15:10 1052
原创 对KMP算法的认识和总结
对KMP算法的认识和总结 I.什么是KMP算法 KMP算法适用于模式串对文本的快速匹配,在暴力的匹配算法中,需要遍历文本串,设文本串的长度为n,模式串的长度为m,时间复杂度为O(n*m),在大数据下显然不行的。KMP算法则可以在最坏情况O(n+m)下完成匹配。 II.KMP算法中的匹配过程 next[]数组是KMP算法的精髓,首先给出例子:ababacab,字符串的下标从0开始
2013-09-11 22:40:54 652
原创 HDU 1867 A + B for you again (KMP)
个人觉得,KMP算法中,讲得最容易懂的是Matrix67那个版本:http://www.matrix67.com/blog/archives/115/ 这道题的意思是,给两个字符串a和b,问a和b是否可以连接,求连接后长度最短的,在最短的条件下,再取字典序最小的。比如样例中的asdf和sdfg,可以连接成asdfg和sdfgasdf,明显前者才是符合要求的答案。 要找长度最短的,自然是有两种连
2013-09-09 22:10:54 533
原创 Ubuntu 将应用程序添加到启动器
1. cd '/usr/share/applications' 2. sudo gedit 应用程序名字.desktop 3. 在弹出的文本里添加: [Desktop Entry] Type=Application Name=名字 Comment=描述 Icon=/应用程序所在文件夹/icon.xpm Exec=/应用程序所在文件夹/应用程序 Terminal=false Ca
2013-09-09 16:48:34 875
转载 Ubuntu 安装 JDK7
转自:http://blog.csdn.net/cmdkmd/article/details/9394825 1 下载JDK http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html 我的机器是x86的 jdk-7u25-linux-i586.tar.gz 2 解压
2013-09-09 15:55:17 755
原创 POJ 1035 Spell checker (trie树)
题目大意:给一系列字符串,构成一个词典,然后有若干询问,每个询问为一个字符串x,问字符串是否在词典中,若在则输出x is correct,否则,通过删除x中的某个字符,或者替换x中的某个字符,或者在x中的插入一个字符,使得得到的新字符在词典中,全部输出。输出时要按照词典中字符串的存在顺序。(词典中最多有10000个单词,字符串的长度最大为15,最多有50个询问。) 简单的trie树应用。每个结点
2013-09-05 21:00:37 543
原创 LA3983 Robotruck (单调队列优化DP)
Problem links: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1984 题目大意:给出一些垃圾点的坐标x,y(x,y为非负整数)以及每个垃圾的重量,给出机器人的携带量cap,垃圾桶在原点(0,0),机器人从原点出发按顺序拣垃
2013-09-02 19:36:37 419
原创 HDU 3516 Tree Construction (四边形优化DP)
题目大意:给出n个点的坐标,对于 i y[j]。问如何将这些点连起来,线只能向上或者向右。求线最短是多大。 定义状态dp[i][j]表示从点i到点j,连起来需要线的最小值。则得到转移方程为: dp[i][j] = min(dp[i][k]+dp[k+1][j]+cost[i][j]);其中i 考虑到该式子跟一般四边形优化的DP是一样的,所以只要证明cost[i][j]是单调递减的即可。
2013-08-23 17:04:53 435
原创 UVa 10304 (黑书例题,DP)
Problem Links: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1245 题目大意:给出N个节点,每个节点都有一个值f,问如何构造一棵二叉树,使得f[1]*dis[1]+f[2]*dis[2]....*f[n]*dis[n]的值最小。其中di
2013-08-22 10:54:30 493
原创 UVa 10534 Wavio Sequence (黑书例题,DP)
Problem links: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1475 最长上升子序列问题。由于N #include #include #include #include #define SIZE 10010 using nam
2013-08-22 00:06:44 398
原创 POJ 1691 (黑书习题,平板涂色)
考虑到矩形个数不超过15个,自然首先想到状态压缩DP。对于每个方块,若已经涂色则对应位置为1,否则为0。则最终状态为(1 dp[state][k] = min(dp[state][k],dp[state+t][color]) ---当color == k时; dp[state][k] = min(dp[state][k],dp[state+t][color]+1) ---当color != k
2013-08-20 19:28:27 812
原创 POJ 1337 偷懒的工人 (黑书习题)
题目描述略为坑爹,其中n取值应该为0 定义状态dp[i]表示在i时刻时,还需要工作的最少时间。由条件可以知道,每一个工作所能被做的时间段为ai~di-ti,这样便可以根据输入把每个时刻可以做的工作构成一个集合。所以对于时刻i,有dp[i] = min(dp[i],dp[i+t[k]]+t[k]);表示在i时刻做了第k个工作。如果i时刻没有工作可做,则dp[i] = dp[i+1]。边界条件为dp
2013-08-20 09:49:46 545
原创 POJ 3254 & POJ 1185 (状态压缩DP)
POJ 3254 题目大意:给一块n*m大小的田地来种东西,每一小块只能种一颗,且相邻的块不能都种。问有多少种种地方案(不种也是一种方案)。答案模上一个给定的数。1 (1)首先想到用一个二进制数来表示某行的种植状况,二进制位上是1代表种了,0代表没种。那么m取最大12时,只需1<<12以内的数就能表示所有状态。令dp[i][s]表示第i层,用s这种种植方法的总方案数,可以知道,由s可以推出下一
2013-08-15 16:48:29 324
原创 POJ 3311 Hie with the Pie (状态压缩DP)
题目大意:规定原点为0,给出n,表示除了原点外还有n个点。然后给出一个矩阵dis[][],dis[i][j]表示i到j的距离。要求每个点都走过一次,并且最终回到原点,求最短路。其中点是可以重复走的。1 这是经典的旅行商问题(TSP),入门状态压缩DP,其中n的取值是个标志。 由于n 定义状态dp[state][k]表示在状态state,且最终停留在k点时的最短路。则有转移方程: dp[s
2013-08-14 21:02:27 460
原创 HDU 3062 & HDU 1824 (2-sat入门题)
《由对称性解2-SAT问题》:http://wenku.baidu.com/view/afd6c436a32d7375a41780f2.html 所谓2-sat问题,就是在满足一定逻辑条件下,是否存在可行解的问题,这里的“可行”指的是在逻辑上不出现矛盾。具体参见上述ppt,确实是非常不错的讲解。 问题类型: 通常来说,一般是有若干个组,每一个组有两个元素,A和A',二者只能选择一个。同时还有
2013-08-08 22:59:25 464
原创 URAL 1143 Electric Path (黑书例题,DP)
Problem Links: http://acm.timus.ru/problem.aspx?space=1&num=1143 由于所有点构成一个凸多边形,所以要使总线路最短,则线路必不相交。所以第 i 个点,必然只能走到 i+1 或者 i-1,当然对于点1的话,则走到2或者n(环状)。 定义状态dp[s][l][0]表示从s出发,遍历 l 个点的最短线路,dp[s][l][1]表
2013-08-07 23:34:54 937
原创 ECNU 1600 公路巡逻 (黑书例题,DP)
Problem links: http://202.120.80.191/problem.php?problemid=1600 定义状态dp[i][j]表示目标车经过i个站,历时j秒所遇到的最少巡逻车。则答案为dp[n][j],满足条件的最少时间即为j。得到的状态转移方程为: dp[i][j+a] = min(dp[i][j+a],dp[i-1][j]+meet);其中meet为目标
2013-08-07 15:12:14 724
原创 HDU 4651 Partition
Partition Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 117 Accepted Submission(s): 61 Problem Description How many ways can the num
2013-08-06 22:53:56 388
原创 UVALive 2031 Dance Dance Revolution
黑书例题4 --- “舞蹈家”怀特先生 problem links:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=32 容易得到dp[x][y][k]的状态,表示左脚在x,右脚在y,跳了k步时花费的最少体力。则有: dp[arr
2013-07-31 21:30:16 499
原创 POJ 2342 & HDU 1520 Anniversary party (树形DP)
入门树形DP。dp[i][0]表示不选i时的最优值,dp[i][1]表示选i时的最优值,则有: dp[i][0] = max(dp[j][0],dp[j][1]), dp[i][1] = dp[j][0] + v[i];其中j是i的儿子节点,v[i]是取i时获得的值。 #include #include #include #include #define SIZE 6060
2013-07-28 13:37:31 297
原创 RQNOJ 49 加分二叉树 (树形DP)
题目描述 设一个n个节点的二叉树tree的中序遍历为(l,2,3,…,n),其中数字1,2,3,…,n为节点编号。每个节点都有一个分数(均为正整数),记第j个节点的分数为di,tree及它的每个子树都有一个加分,任一棵子树subtree(也包含tree本身)的加分计算方法如下: subtree的左子树的加分× subtree的右子树的加分+subtree的根的分数 若某个子树为主,规定其加分
2013-07-27 22:53:25 721
原创 归并排序
#include #include #include #include using namespace std; void Merge(int *arr, int left, int mid, int right, int *res) { int i = left, j = mid+1, k = left; while(i <= mid && j <
2013-06-18 21:24:12 274
原创 堆排序
堆类似一颗完全二叉树,根节点是一个最值,同时它的左右两颗子树也是堆。下面以最大堆为例,插入操作跟插入排序是一样的,把新加入的节点放到树的最后面,然后跟它的父亲比较,如果比父亲比它小,则互换位置,直到找到某个祖先节点大于它时停止。取最大值则直接取根节点,若删去该节点,则要重新调整堆,使得该堆仍是最大堆。做法是把树中最后一个节点放到根节点,然后向下查找,跟其值最小的孩子互换位置,直到找到一个大于它的子
2013-06-12 14:31:24 331
原创 快速排序
无聊练习下快排: 非递归版(从大到小): #include #include #include #include using namespace std; int Stack[1024],top; int solve(int *arr, int st, int ed) { int tem = arr[st]; while(st < ed)
2013-06-11 22:15:12 363
原创 CodeForces #187.div2.problem E
E. Sereja and Subsequences time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Sereja has a sequence that consi
2013-06-09 10:55:31 585
原创 POJ 1236 Network of Schools (强连通分量+缩点)
Network of Schools Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 8935 Accepted: 3523 Description A number of schools are connected to a computer network. Agreements have been deve
2013-05-30 09:39:29 473
原创 HDU 1827 Summer Holiday (强连通分量+缩点)
根据题目要求,只需求出各个强连通分量,然后进行缩点。缩点后找出入度为0的点即是需要打的电话数,也就是说找出能覆盖整张关系网的点。因为要求费用最低,所以在求出一个强连通分量时(栈弹出时)找到最小值,记录起来代表该连通分量(即缩点)的值。 #include #include #include #include #include #define SIZE 1001 using namesp
2013-05-29 20:23:21 355
原创 POJ 3680 Intervals (最小费用最大流+离散化)
Intervals Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 5618 Accepted: 2226 Description You are given N weighted open intervals. The ith interval covers (ai, bi) and weighs wi. Yo
2013-05-28 19:01:20 571
原创 POJ 3422 Kaka's Matrix Travels (最大费用最大流)
Kaka's Matrix Travels Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6538 Accepted: 2594 Description On an N × N chessboard with a non-negative number in each grid, Kaka starts his
2013-05-28 10:00:45 487
原创 HDU 4198 Quick out of the Harbour (bfs)
简单的bfs。题意是从某个点出发,问怎样才能最快走到出口。其中 . 代表空地,@代表桥,每座吊桥首先要放下来,这个过程需要D时间,然后过桥再消耗单位时间。 这里的小技巧是需要用到结构体priority_queue。 #include #include #include #include #include #define SIZE 512 using namespace
2013-05-27 19:25:40 415
原创 HDU 2412 Party at Hali-Bula (树形DP + hash)
Party at Hali-Bula Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1114 Accepted Submission(s): 376 Problem Description Dear Contestan
2013-05-22 16:42:17 399
原创 CodeForces 245H Queries for Number of Palindromes (区间DP)
H. Queries for Number of Palindromes time limit per test 5 seconds memory limit per test 256 megabytes input standard input output standard output You've got a string s
2013-05-22 01:02:56 926
原创 HDU 4274 Spy's Work (dfs)
每一个节点维护一个下限和一个上限,初始化为1和inf。根据输入的大小关系,可以相应更改该点的上下限。比如输入se,则点s的下限修改为e+1,若s=e,则是上下限都为e。然后判断是否下限大于上限,若是,则说明是lie了。考虑到父亲节点的上限是不受孩子的影响的,所以dfs的时候只需根据孩子的下限来修改父亲的下限,每次返回到当前点的时候,判断是否出现下限大于上限的情况,若有,则标记。 #include
2013-05-22 00:11:33 609
原创 HDU 4267 A Simple Problem with Integers (线段树)
此题添加了更新条件,既对于区间[l,r],对于i属于[l,r],必须有(i-l)%k==0的点才能更新。由此知道i%k == l%k,因为只有这样才能满足(i-l)%k==0。考虑到k 更新的时候,只需把该区间内的res[rt][l%k]更新即可,原因是上述的i%k == l%k。res[rt][l%k]表示的是一个区间内和l同模的所以点。 查询操作要更新到底,注意从根节点开始记录更新情况,因
2013-05-21 20:18:33 339
原创 HDU 4277 USACO ORZ (dfs + hash)
USACO ORZ Time Limit: 5000/1500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2181 Accepted Submission(s): 773 Problem Description Like everyone, cows enj
2013-05-21 19:48:18 515
原创 HDU 4294 Multiple (数论+bfs)
Multiple Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 616 Accepted Submission(s): 159 Problem Description Given a positive intege
2013-05-18 21:09:20 463
原创 HDU 4291 (矩阵快速幂+循环节)
A Short problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1026 Accepted Submission(s): 407 Problem Description According to a re
2013-05-16 21:36:36 562
原创 HDU 4288 && Codeforces 85D (线段树+离散化+离线处理)
首先,为什么要离散化和离线处理?因为输入的数字会很大,可以达到10^9,但输入的N最多为10^5,即做多添加100000个数(不删除任何数),所以把输入的值进行排序,离散成1~100000,同时这也可以知道要建多大的线段树。 离散化的时候,经常要用到去重操作和查找操作,一般查找是用二分查找的。通过这题学习到了两个新的STL。 1)unique:去重 2)lower_bound:返回第一个比需要
2013-05-16 16:07:44 552
原创 HDU 3555 Bomb (数位DP)
Bomb Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) Total Submission(s): 3558 Accepted Submission(s): 1245 Problem Description The counter-terrorists fou
2013-05-14 19:15:15 389
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人