第【7】章: 数递归、DFS、剪枝、回溯等问题 学习报告
(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、剪枝、回溯等问题 学习报告的更多相关文章
- HDU 5952 Counting Cliques 【DFS+剪枝】 (2016ACM/ICPC亚洲区沈阳站)
Counting Cliques Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- LA 6476 Outpost Navigation (DFS+剪枝)
题目链接 Solution DFS+剪枝 对于一个走过点k,如果有必要再走一次,那么一定是走过k后在k点的最大弹药数增加了.否则一定没有必要再走. 记录经过每个点的最大弹药数,对dfs进行剪枝. #i ...
- 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 ...
- 翻译连载 | 第 9 章:递归(下)-《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇
原文地址:Functional-Light-JS 原文作者:Kyle Simpson-<You-Dont-Know-JS>作者 关于译者:这是一个流淌着沪江血液的纯粹工程:认真,是 HTM ...
- PKU 2531 Network Saboteur(dfs+剪枝||随机化算法)
题目大意:原题链接 给定n个节点,任意两个节点之间有权值,把这n个节点分成A,B两个集合,使得A集合中的每一节点与B集合中的每一节点两两结合(即有|A|*|B|种结合方式)权值之和最大. 标记:A集合 ...
- poj 1011 :Sticks (dfs+剪枝)
题意:给出n根小棒的长度stick[i],已知这n根小棒原本由若干根长度相同的长木棒(原棒)分解而来.求出原棒的最小可能长度. 思路:dfs+剪枝.蛮经典的题目,重点在于dfs剪枝的设计.先说先具体的 ...
- 历届试题 邮局(dfs+剪枝)
历届试题 邮局 时间限制:1.0s 内存限制:256.0MB 问题描述 C村住着n户村民,由于交通闭塞,C村的村民只能通过信件与外界交流.为了方便村民们发信,C村打算在C村建设k ...
- 生日蛋糕 (poj1190) (dfs剪枝)
[题目描述] 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体. 设从下往上数第i(1 <= i <= M)层蛋糕是半径为Ri, 高度为 ...
- *HDU1455 DFS剪枝
Sticks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
随机推荐
- Js中各种类型的变量在if条件中是true还是false
如果操作数是一个对象,返回true如果操作数是一个空字符串,返回false如果操作数是一个非空字符串,返回true如果操作数是数值0,返回false如果操作数是任意非0数值(包括Infinity),返 ...
- 痞子衡嵌入式:kFlashFile v1.0 - 一个基于Flash的掉电数据存取方案
大家好,我是痞子衡,是正经搞技术的痞子.今天给大家带来的是痞子衡的个人小项目 - kFlashFile. 痞子衡最近在参与一个基于 i.MXRT1170 的项目,项目有个需求,需要在 Flash 里实 ...
- hibernate快速入门示例
hibernate概述 hibernate是一个java的全自动ORM框架,它可以自动生成SQL语句.自动建表.自动执行,使用者可以不使用SQL完成数据的CRUD操作,同时它也是基于JPA规则的一种实 ...
- 断路器Hystrix(Feign)
上一篇中我们讲了 断路器Hystrix(Ribbon) 本章讲解Feign+Hystrix已经Request请求传递,各种奇淫技巧…. - Hystrix Hystrix支持回退概念:当 断路器 打开 ...
- nginx location 知识知多少
写在之前 众所周知 nginx location 路由转发规则多种多样,尤其是 [ = | ~ | ~* | ^~ ] 这些前缀是什么意思.root 与 alias 是否可以区分开,nginx 作为反 ...
- 自描述C++部分面试题集
1.谈谈啥叫对象成员以及对象成员的构造函数调用调用方式. 在类中定义的数据成员一般都是基本的数据类型.但是类中的成员也可以是对象,叫做对象成员. C++中对对象的初始化时非常重要的操作,当创建一个对象 ...
- C++中vector和堆的常用使用方法&例题:数据流中的中位数
vector常用函数: (1)a.size();//返回a中元素的个数: (2)a.push_back(5);//在a的最后一个向量后插入一个元素,其值为5 (3)a[i]; //返回a的第i个元素, ...
- django 后端分页
分页处理脚本: # -*- coding: utf-8 -*- # @Time : 2019-01-22 10:41 # @Author : 小贰 # @FileName: page.py # @fu ...
- 结合实际需求,在webapi内利用WebSocket建立单向的消息推送平台,让A页面和服务端建立WebSocket连接,让其他页面可以及时给A页面推送消息
1.需求示意图 2.需求描述 原本是为了给做unity3d客户端开发的同事提供不定时的消息推送,比如商城购买道具后服务端将道具信息推送给客户端. 本篇文章简化理解,用“相关部门开展活动,向全市人民征集 ...
- Django---进阶7
目录 图书管理的图书增删改查 choices参数(数据库字段设计常见) MTV与MVC模型 多对多三种创建方式 Ajax 小例子 作业 图书管理的图书增删改查 from django.shortcut ...