Problem3-1016
2016-05-21 17:23
274 查看
简单题意:整体来讲,就是在一个二维平面内走格子,规则是:一次只能移动一次,并且不能往回走,同时走过的格子不能再走第二遍,求走n步不同的解决方案!
解题思路:f
表示走n步的方案数,x
表示向下走的方案数,z
表示向左右走的方案数;所以 f
=x
+z
,x
=x[n-1]+z[n-1];z
=x[n-1]*2+z[n-1]
所以f
=2*f[n-1]+x[n-1]===>f
=2*f[n-1]+f[n-2];
代码如下:
#include <iostream>
using namespace std;
int main()
{
long long dp[25];
dp[1]=3;
dp[2]=7;
int N,m,flag=2;
cin>>N;
while(N--)
{
cin>>m;
if(m<=flag)
cout<<dp[m]<<endl;
else
{
for(int i=flag+1;i<=m;++i)
dp[i]=2*dp[i-1]+dp[i-2];
flag=m;
cout<<dp[m]<<endl;
}
}
return 0;
}
解题思路:f
表示走n步的方案数,x
表示向下走的方案数,z
表示向左右走的方案数;所以 f
=x
+z
,x
=x[n-1]+z[n-1];z
=x[n-1]*2+z[n-1]
所以f
=2*f[n-1]+x[n-1]===>f
=2*f[n-1]+f[n-2];
代码如下:
#include <iostream>
using namespace std;
int main()
{
long long dp[25];
dp[1]=3;
dp[2]=7;
int N,m,flag=2;
cin>>N;
while(N--)
{
cin>>m;
if(m<=flag)
cout<<dp[m]<<endl;
else
{
for(int i=flag+1;i<=m;++i)
dp[i]=2*dp[i-1]+dp[i-2];
flag=m;
cout<<dp[m]<<endl;
}
}
return 0;
}
相关文章推荐
- C++实现设计模式之——工厂模式
- ESP8266-SDK的硬件定时器
- 多线程实现方式---实现Runnable接口
- Lucas
- nginx基本架构详解
- SPP for Visual Recognition
- codeforces_672C. Recycling Bottles(贪心)
- android中的AIDL
- 练习三1003
- xen server 6.2 install patch
- retrofit2、RxJava简单使用总结
- 月之眼计划
- STL Map使用
- 基于FS4412嵌入式系统移植(4) u-boot移植与指令添加
- CppUnit入门
- Mac、Windows下Android Studio快捷键的使用
- 拨号上网与宽带上网有什么区别?
- windows下git添加文件时,LF will be replaced by CRLF in test.txt.
- NSSearchPathForDirectoriesInDomains用法
- 面试题之求两个日期之间的天数差