这个题在POJ上有,地址是:http://acm.pku.edu.cn/JudgeOnline/problem?id=2411以前做过这个题,是用状态DP来做的。大致说下方法,DP需要用到两维,一维表示到达哪一行,另一维表示这一行的状态。用二进制来表示假定方格为N行M列。表示方法如下:f[i][j]。----i表示第i行,j表示该行的二进制状态。而f[i][j]则记录由i,j构成的状态有多少种摆法。我举个例子,假定总共有4行5列。如下状态:*号表示被铺了方块,0表示尚未被铺方块。******0**00000000000可以看到第2行的状态为*0**0,即用二进制来表示就是10110,即f[2] Read More
posted @ 2013-04-05 21:37 upon77 Views(185) Comments(0) Diggs(0)
转自:http://blog.csdn.net/tianshuai11/article/details/7838142n个人拿着2元去买票。票价一元,且售票元只能用n个人购票的一元给2元的找零。问有几种排列方法 分析:卡特兰数方法 递推公式:F(2*n) =F(0)*F(2(n-1)) +F(1)*F(2(n-2))+……+F(2(n-1))*F(0) F(n) =F(0)*F(n-1) +F(1)*F(n-2)+……+F(n-1)*F(0) 解答: 所有序列的个数 :C (2n,n) (ps:由于数学函数难打... Read More
posted @ 2013-04-05 21:20 upon77 Views(208) Comments(0) Diggs(0)
转自:http://www.cnblogs.com/memewry/archive/2012/08/25/2656966.html1、线程与进程的区别联系2、进程通信方式有哪些?3、同步的方式有哪些?4、ThreadLocal与其它同步机制的比较5、进程死锁的条件第一题:(1)线程是进程的一个实体,一个进程可以拥有多个线程,多个线程也可以并发执行。一个没有线程的进程也可以看做是单线程的,同样线程也经常被看做是一种轻量级的进程。并且进程可以不依赖于线程而单独存在,而线程则不然。(2)进程是并发程序在一个数据集合上的一次执行过程,进程是系统进行资源分配和调度的独立单位,线程是进程的实体,它是比进程 Read More
posted @ 2013-04-05 15:09 upon77 Views(188) Comments(0) Diggs(0)
转自:http://www.cnblogs.com/memewry/archive/2012/08/22/2651696.html一、进程/线程间同步机制。临界区、互斥区、事件、信号量四种方式临界区(Critical Section)、互斥量(Mutex)、信号量(Semaphore)、事件(Event)的区别1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。在任意时刻只允许一个线程对共享资源进行访问,如果有多个线程试图访问公共资源,那么在有一个线程进入后,其他试图访问公共资源的线程将被挂起,并一直等到进入临界区的线程离开,临界区在被释放后,其他线程才可以抢占 Read More
posted @ 2013-04-05 12:12 upon77 Views(158) Comments(0) Diggs(0)
第二十章、一致性哈希算法转自:http://blog.csdn.net/v_july_v/article/details/6880698tencent2012笔试题附加题 问题描述: 例如手机朋友网有n个服务器,为了方便用户的访问会在服务器上缓存数据,因此用户每次访问的时候最好能保持同一台服务器。已有的做法是根据ServerIPIndex[QQNUM%n]得到请求的服务器,这种方法很方便将用户分到不同的服务器上去。但是如果一台服务器死掉了,那么n就变为了n-1,那么ServerIPIndex[QQNUM%n]与ServerIPIndex[QQNUM%(n-1)]基本上都不一样了,所以大多数用. Read More
posted @ 2013-03-22 17:25 upon77 Views(129) Comments(0) Diggs(0)
十一、从头到尾彻底解析Hash 表算法作者:July、wuliming、pkuoliver 出处:http://blog.csdn.net/v_JULY_v。 说明:本文分为三部分内容, 第一部分为一道百度面试题Top K算法的详解;第二部分为关于Hash表算法的详细阐述;第三部分为打造一个最快的Hash表算法。------------------------------------第一部分:Top K 算法详解问题描述百度面试题: 搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。 假设目前有一千万个记录(这些查询串的重复... Read More
posted @ 2013-03-22 15:05 upon77 Views(159) Comments(0) Diggs(0)
设一数组N个数,确定其中第K个最大值,这是一个选择问题,解决办法很多:所谓“第(前)k大数问题”指的是在长度为n(n>=k)的乱序数组中S找出从大到小顺序的第(前)k个数的问题。解法1:我们可以对这个乱序数组按照从大到小先行排序,然后取出前k大,总的时间复杂度为O(n*logn+k)。解法2:利用选择排序或交互排序,K次选择后即可得到第k大的数。总的时间复杂度为O(n*k)解法3:利用快速排序的思想,从数组S中随机找出一个元素X,把数组分为两部分Sa和Sb。Sa中的元素大于等于X,Sb中元素小于X。这时有两种情况:1.Sa中元素的个数小于k,则Sb中的第k-|Sa|个元素即为第k大数;2 Read More
posted @ 2013-03-21 11:50 upon77 Views(294) Comments(0) Diggs(0)
编程之美中的“寻找发帖水王”描述的是这么一个问题,有一个ID列表,其中有一个ID(水王的ID)出现的次数超过了一半,请找出这个ID。书中的思路是每次从列表中删除两个不同的ID,不影响“水王的ID在剩余ID中仍然超过一半”这一事实,因此每次删除两个不同的ID,直到剩下的所有ID都相同,那么剩下的就是水王的ID。具体编程的时候,使用一个candidate记录当前猜测的水王ID,一个count记录其累计次数,然后遍历整个ID列表,对于当前所考查的ID,如果和candidate相同,那么count++,如果不同,那么count--,这个“count--;”的动作就是“删除两个不同的ID”在程序中的体现 Read More
posted @ 2013-03-21 11:44 upon77 Views(126) Comments(0) Diggs(0)
定义S为石头摆放的一个格局,格局标识石头目前的连续区段的状态以及每个连续区段的石头数目。初始状态下,N块石头连成一体,可以表示为{N},即N个连续的石头。取走第二块石头之后格局变成{1, N-2},即两段数目分别为1和N-2的连续的石头。这样,问题可以描述为:对于初始格局S_0={N},甲需要找到制胜的策略。甲取完石头将格局变为S_1后,无论乙怎么取(记乙取完后的格局为S_2),甲总能在当前格局S_2中找到制胜的策略。问题转化成S_2上的小一个规模的问题。需要注意,S_2实际应为从S_1中任意取一次石头后可能形成的众多格局中的一个,只要其中任意一个S_2能让甲无法找到制胜策略,那么甲这次从S_ Read More
posted @ 2013-03-21 11:34 upon77 Views(208) Comments(0) Diggs(0)
解法1枚举:省略解法2cost:i+1层: Y+N1+N2-N3 i层: Y i-1层 : Y-N1+N2+N3可知cost(i-1)>cost(i)的条件:N1<N2+N3,两边同时加N2得到,N1+N2<N2*2+N3 (1) cost(i+1)<cost(i)的条件:N1+N2<N3(2) cost(i+1) <cost(i-1)的条件:N1<N3即N1+N2<N2+N3(3)初始条件下:N1=0,N2<N3,(1)(2)(3)都满足,cost(i-1)>cost(i)>cost(i+1)之后随着电梯停留层数增加,N1增加 Read More
posted @ 2013-03-21 11:32 upon77 Views(148) Comments(0) Diggs(0)