
递归
ITCharge
高效率编程,慢节奏生活。
展开
-
NEFU564 汉诺塔【递归】
题目大意:庙里有3个柱子,柱A、柱B、柱C。柱A有64个盘子,从上往下越来越大。庙里的老和尚想把这64个盘子全部移动到柱C上。移动的时候始终只能小盘子压住大盘子,大盘子不能在小盘子上边。每次只能移动一个。问:将柱A上面钱N个盘子从A搬到柱C的移动次数最少的搬动方法是什么思路:吧N个盘子从柱A移到柱C需要三个步骤:1)把住A上N-1个盘子借助柱C移到柱B2)把柱A上第N个盘子移动到柱C3)把柱B上N-1个盘子借助柱A移动到柱C原创 2015-04-13 15:21:38 · 1085 阅读 · 0 评论 -
NEFU560 半数集【递归】
题目大意:给定一个自然数N,有N开始产生半数集set(N)。set(N)定义如下:1)N是set(N)中的元素2)在N的左边自然数,但该自然数不能超过最近添加的数的一半。3)按照这个规律,直到不能添加自然数为止。例如:N = 6时,只能添加不超过6/2=3的自然数为1、2、3,即为16、26、36。而26、36可以继续添加1,即126、136。则set(N) = {6、16、26、126、36、136}。思路:递归的添加,设能添加的数的个数为HalfSet(N),可遍历1~N/2,ans原创 2015-04-13 16:18:40 · 1218 阅读 · 0 评论 -
NEFU559 分书问题【递归】
题目大意:有编号分别为1~N的N本书,准备分给N个人,每个人阅读兴趣用一个二维数组表示。1:喜欢这本书;0:不喜欢这本书。Like[i][j] = 1,i喜欢书j;Like[i][j] = 1,i不喜欢书j。问:如何分书才能使得所有人都满意,输出第i个人分得的书的编号,如果有多个答案输出序列数小的那一组。思路:序列要求从小到大,那么就从小到大递归美剧每个人喜欢的书,找到第一组答案就可以了。用vis[]数组来判断第i本书是否被选,ans[]数组来存储输出序列。从第一个人开始选书,到最后一个原创 2015-04-13 18:03:26 · 1280 阅读 · 0 评论 -
NEFU561 方块计算【递归】
题目大意:在一间M*N的长方形房间里,地上铺了白色、黑色两种颜色的正方形瓷砖,你站在其中一块黑色瓷砖上,只能向相邻的黑色瓷砖移动。问:总共能够达到多少快黑色的瓷砖。数据中,'.'表示黑色的瓷砖,'#'表示白色的瓷砖,'@'表示你站的这块瓷砖(该瓷砖是黑色的)。思路:只能向相邻的黑色瓷砖移动,那么对于位置(x,y),就只能向(x+1,y),(x,y+1),(x-1,y),(x,y+1)的黑色的瓷砖移动。每次移动的时候看看没走过的瓷砖是不是黑色的瓷砖,如果是就继续走,否则就返回。用ans存储走过原创 2015-04-13 18:30:14 · 1032 阅读 · 0 评论 -
NEFU563 鸭子知多少?【递归】
题目大意:有个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又2只。这样经过了N个村子还剩下2只鸭子,问:他出发时所赶的鸭子共有多少只。思路:路过第i个村子剩的鸭子数 = 第i+1天刚开始赶的鸭子数 = (第i+1个村子卖完剩的鸭子数+2)*2。用dfs(i)表示第i天剩的鸭子数,那么dfs(i) = (dfs(i+1)+2)*2。从第1天开始卖,则答案就是第0天还未卖的时候剩的鸭子数,即dfs(0)。原创 2015-04-13 16:08:24 · 1423 阅读 · 0 评论 -
二分查找、三分查找求极点、二分求等比数列【模板】
二分查找:int a[110],N;int BinarySearch(int *a,int x){ int Left = a[1]; int Right = a[N]; while(Left <= Right) { int mid = (Left+Right)>>1; if(a[mid] == x) retu原创 2015-05-06 15:36:39 · 1180 阅读 · 0 评论