Problem-P
2016-05-08 10:39
225 查看
概述:现在规定了平面内可以行走的方向,向左向右和向上,不能够向下,现在给出行走的步数,问在这个步数内最多有多少种方案。
思路:一个类似与斐波那契数列的地推题目,不过与斐波那契数列不同的是,在选择向左或是向右走一步之后,下一步只能有两个方向,而在选择向上行走时,可以有三个方向,即向左上或是右上或者一直向上。也就是在相邻的某一步内,选择的方案成为两倍,即f(x)=2*f(x-1)+f(x-2)。
感想:看到题目,第一反应是斐波那契数列,就按照这个思路开始做题,结果提交时wrong,然后重新推理时候才发现向上时候的不同。。。昨天做斐波那契的题做多了。。。思维固定了。。尴尬。
#include<iostream>
using namespace std;
int main()
{
int N;
int m;
int f[25];
f[1]=3;
f[2]=7;
for(int i=3;i<=20;i++)
f[i]=2*f[i-1]+f[i-2];
cin>>N;
while(N--)
{
cin>>m;
cout<<f[m]<<endl;
}
return 0;
}
思路:一个类似与斐波那契数列的地推题目,不过与斐波那契数列不同的是,在选择向左或是向右走一步之后,下一步只能有两个方向,而在选择向上行走时,可以有三个方向,即向左上或是右上或者一直向上。也就是在相邻的某一步内,选择的方案成为两倍,即f(x)=2*f(x-1)+f(x-2)。
感想:看到题目,第一反应是斐波那契数列,就按照这个思路开始做题,结果提交时wrong,然后重新推理时候才发现向上时候的不同。。。昨天做斐波那契的题做多了。。。思维固定了。。尴尬。
#include<iostream>
using namespace std;
int main()
{
int N;
int m;
int f[25];
f[1]=3;
f[2]=7;
for(int i=3;i<=20;i++)
f[i]=2*f[i-1]+f[i-2];
cin>>N;
while(N--)
{
cin>>m;
cout<<f[m]<<endl;
}
return 0;
}
相关文章推荐
- java 构造函数
- Dubbo之旅--注册中心
- char*,const char*和string 三者转换
- springmvc 加载WebApplicationContext源码分析
- 求和∑ ∑
- java中存在的四种引用
- 1010 ProblemJ
- PHP实现简单数字分页效果
- 服务器系统及软件常见漏洞
- wxpython SizerItem的大小控制
- 取石子游戏
- C++智能指针管理类
- Http请求
- hdu1024(m段子段和最大)
- 用两个队列实现一个栈
- 用两个队列实现一个栈
- 哈希分片之哈希取模法(round robin)
- 多线程——线程通信
- C语言函数的参数及传递方式
- 2016百度春季实习生面试