随笔分类 -  ACM-递归

摘要:通过分类讨论,将规模较大的问题转换成规模较小的相同问题,学会”降维“,将索引值不断降小,就可以递归求解设f(m,n)为把m个苹果放到n个盘子中的方法数,m>=0,n>=0.若m和n中任何一个等于0,那么f(m,n) = 1,注意不是等于0,因为相当于就那么一种结果,就是不往盘子里面放(没有苹果),或者,连盘子都没有。若n=1,显然对于任意的m>=0 有f(m,1) = 1若m=1,显然对于任意的n>=0 有f(1,n) = 1接下来讨论m>1 && n>1的情况:若 m < n 则 f(m,n) = f(m,m)。即空哪几个盘子都是一样 阅读全文
posted @ 2012-02-11 18:42 yangleo 阅读(477) 评论(0) 推荐(0)
摘要:这题主要求二叉树结点到根结点的路径长度,基本的思路是 比较a与b,如果a大则当前结点是左孩子,a-b作为父结点的左数,父结点的右数与当前右数相等;如果b大则当前结点为右孩子,同理可以求父结点,直到父结点为(1,1)遍历结束。当用原始的递归算法会超时,需要考虑a=1或b=1的特殊情况,同时利用a与b的倍数关系加快遍历速度Source CodeProblem: 2499User: yangliuACMerMemory: 244KTime: 0MSLanguage: C++Result: Accepted#include <iostream> using namespace std; v 阅读全文
posted @ 2012-02-11 15:31 yangleo 阅读(551) 评论(1) 推荐(0)
摘要:这题很简单,但还是超时和WA一次主要是由于1、这题输入可能是非常大的数,可能上千位,所以把输入当成了2000位的字符串来处理,转化成数字2、还是变量初始化的问题,WA了一个,细心最重要#include <iostream> #include <string> using namespace std; int f (int n){ int sum = 0; while((n/10) > 0){ sum += n % 10; n /= 10; } sum += n; if(sum >= 10) return f(sum); else return sum; } 阅读全文
posted @ 2011-12-25 15:20 yangleo 阅读(446) 评论(0) 推荐(0)