(7.2)节:   递归问题   

1.题干:

递归方便表达,但是性能上消耗过多

1、有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶、3阶。 请实现一个方法,计算小孩有多少种上楼的方式。

为了防止溢出,请将结果Mod 1000000007

给定一个正整数int n,请返回一个数,代表上楼的方式数。

保证n小于等于100000。

1、关键代码1:

int k2(int n)

{int rte=0;

if(n==1)

return 1;

if(n==2)

return 2;

if(n==3)

return 4;

return (k2(n-1)+k2(n-2)+k2(n-3))%1000000007;

}

关键代码2:

int  k2(int n)

{

int a[n+2];

int k;

a[0]=0;a[1]=1;a[2]=2;a[3]=4;

if(n==0)

k=0;

else if(n==1)

k=1;

else if(n==2)

k=2;

else if(n==3)

k=4;

else

for(int i=n;i<=n;i++)

{a[i]=(a[i-1]% 1000000007+a[i-2]% 1000000007+a[i-3])%1000000007;

k=a[i];

}

return k;

}

关键代码3:

int  k2(int n)

{int k=0;

if(n==0)

return 1;

if(n==1)

return 1;

if(n==2)

return 2;

if(n==3)

return 4;

int x1=1;

int x2=2;

int x3=4;

for(int i=4;i<=n;i++)

{int x_1=x1;

x1=x2;

x2=x3;

x3=x_1%1000000007+x2%1000000007+x1%1000000007;

k=x3%1000000007;

}

return k;

}

(7.3)节:   机器人走方格   

1.题干:有一个XxY的网格,一个机器人只能走格点且只能向右或向下走,要从左上角走到右下角。 请设计一个算法,计算机器人有多少种走法。

给定两个正整数int x,int y,请返回机器人的走法数目。

保证x+y小于等于12。

2、解答思路:从一开始找规律

3、关键代码1:

int k1(int x,int y)

{if(x==1||y==1)

return 1;

return k3(x-1,y)+k3(x,y-1);

}

关键代码2:

int k2(int x,int y)

{int a[x+1][y+1];

for(int i=1;i<=y;i++)

a[1][i]=1;

for(int i=1;i<=x;i++)

a[i][1]=1;

for(int i=2;i<=x;i++)

for(int j=2;j<=y;j++)

a[i][j]=a[i-1][j]+a[i][j-1];

return a[x][y];

}

(7.4)节:   硬币表示  

1、题干:假设我们有8种不同面值的硬币{1,2,5,10,20,50,100,200},用这些硬币组合够成一个给定的数值n。 例如n=200,那么一种可能的组合方式为 200 = 3 1 + 1*2 + 1*5 + 2*20 + 1 50 + 1 * 100. 问总共有多少种可能的组合方式?

2、解答思路:通过对靠近x的值进行分解,然后递归进行下一步分解

3、关键代码:

int a[8]={1,2,5,10,20,50,100,200};

int k3(int a[],int k,int x)//a为存储面值的数组,k为数组个数,x为给定数值n

{

if(x<=0)//刚好为倍数

return 1;

if(k==0)//只有一种走法;

return 1;

int max=0;

for(int i=0;i*a[k]<=x;i++)

{

max+=k3(a,k-1,x-i*a[k]);

}

return max;

}

int main()

{

int a[8]={1,2,5,10,20,50,100,200};

cout<<k3(a,8,10)<<endl;

return 0;

}

第【7】章: 数递归、DFS、剪枝、回溯等问题 学习报告的更多相关文章

  1. HDU 5952 Counting Cliques 【DFS+剪枝】 (2016ACM/ICPC亚洲区沈阳站)

    Counting Cliques Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  2. LA 6476 Outpost Navigation (DFS+剪枝)

    题目链接 Solution DFS+剪枝 对于一个走过点k,如果有必要再走一次,那么一定是走过k后在k点的最大弹药数增加了.否则一定没有必要再走. 记录经过每个点的最大弹药数,对dfs进行剪枝. #i ...

  3. poj 1564 Sum It Up | zoj 1711 | hdu 1548 (dfs + 剪枝 or 判重)

    Sum It Up Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Sub ...

  4. 翻译连载 | 第 9 章:递归(下)-《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇

    原文地址:Functional-Light-JS 原文作者:Kyle Simpson-<You-Dont-Know-JS>作者 关于译者:这是一个流淌着沪江血液的纯粹工程:认真,是 HTM ...

  5. PKU 2531 Network Saboteur(dfs+剪枝||随机化算法)

    题目大意:原题链接 给定n个节点,任意两个节点之间有权值,把这n个节点分成A,B两个集合,使得A集合中的每一节点与B集合中的每一节点两两结合(即有|A|*|B|种结合方式)权值之和最大. 标记:A集合 ...

  6. poj 1011 :Sticks (dfs+剪枝)

    题意:给出n根小棒的长度stick[i],已知这n根小棒原本由若干根长度相同的长木棒(原棒)分解而来.求出原棒的最小可能长度. 思路:dfs+剪枝.蛮经典的题目,重点在于dfs剪枝的设计.先说先具体的 ...

  7. 历届试题 邮局(dfs+剪枝)

      历届试题 邮局   时间限制:1.0s   内存限制:256.0MB      问题描述 C村住着n户村民,由于交通闭塞,C村的村民只能通过信件与外界交流.为了方便村民们发信,C村打算在C村建设k ...

  8. 生日蛋糕 (poj1190) (dfs剪枝)

    [题目描述] 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体. 设从下往上数第i(1 <= i <= M)层蛋糕是半径为Ri, 高度为 ...

  9. *HDU1455 DFS剪枝

    Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

随机推荐

  1. jvm入门及理解(六)——垃圾回收与算法

    一.jvm垃圾回收要做的事情 哪些内存需要回收 什么时候回收 怎么回收 二.如何判断对象已经死亡,或者说确定为垃圾 引用计数法: 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器的值就加1: ...

  2. Spring Cloud Alibaba系列(五)sentinel实现服务限流降级

    一.sentinel是什么 sentinel的官方名称叫分布式系统的流量防卫兵.Sentinel 以流量为切入点,从流量控制.熔断降级.系统负载保护等多个维度保护服务的稳定性.在Spring Clou ...

  3. java后端无法接收到前端传递的json对象

    java后端无法接收到前端传递的json对象 一·可能是因为未使用@RequestBody 在Controller层中,要么使用@RestController要么使用@Controller+@@Req ...

  4. IE6浏览器有哪些常见的bug,以及解决IE6常用bug的方法

    1.IE6不支持min-height,解决办法使用css hack: .target { min-height: 100px; height: auto !important; height: 100 ...

  5. LESS 原理,一款css的预处理程序Less的使用

    ​Less一种动态样式语言,LESS将CSS赋予了动态语言的特性,如变量,继承,运算,函数...LESS 既可以在客户端上运行 (支持IE 6+, Webkit, Firefox),也可以借助Node ...

  6. List集合-02.LinkedList

    2.LinkedList 2.1 UML继承关系图 2.2 底层存储节点 通过内部类Node存储,可以看出是双向的链表结构 private static class Node<E> { E ...

  7. SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 后端篇(一): 搭建基本环境、整合 Swagger、MyBatisPlus、JSR303 以及国际化操作

    相关 (1) 相关博文地址: SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 前端篇(一):搭建基本环境:https://www.cnblogs.com/l-y- ...

  8. day30 继承、派生与多态,类中方法和内置函数

    目录 一.多继承出现的问题(mixins机制) 二.派生与方法重用 三.多态 1 什么是多态 2 为什么要有多态 3 python中多态的鸭子类型 四.绑定方法与非绑定方法 1 绑定方法 1.1对象的 ...

  9. hacknos靶机实战

    工具: kali 192.168.1.6 nmap 打开使用nmap -sP 192.168.1.0/24 扫描活跃的主机 发现目标ip 使用nmap 查看开启了什么服务Nmap -v -A -PN ...

  10. SSTI(模板注入)

    SSTI 一. 什么是SSTI 模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档. ...