您的位置:首页 > 其它

动态规划—Problem P

2016-05-10 18:29 211 查看
动态规划—Problem P

题意

在一无限大的二维平面中,我们做如下假设:

1、每次只能移动一格;

2、不能向后走(假设你的目的地是“向上”,那么你可以向左走,可以向右走,也可以向上走,但是不可以向下走);

3、走过的格子立即塌陷无法再走第二次;

求走n步不同的方案数(2种走法只要有一步不一样,即被认为是不同的方案)。

解题思路

递推。关键是找出递推公式。现在用数组dp
表示走n步的方案数。由题目知,可以向下或向左向右走,这里假设用down
表示向下走的方案数,RL
表示向左右走的方案数;

dp
=down
+RL


down
=down[n-1]+RL[n-1];

RL
=down[n-1]*2+RL[n-1];

所以dp
=2*dp[n-1]+down[n-1]===>dp
=2*dp[n-1]+dp[n-2];

得到递推公式为:dp
=2*dp[n-1]+dp[n-2]。

感想

递推公式不好找,需要好好分析。

AC代码

#include<iostream>
using namespace std;
#define MAX 25

int main()
{
int dp[MAX];
int C,n;
dp[1]=3;
dp[2]=7;
for(int i=3;i<=20;i++)
{
dp[i]=dp[i-1]*2+dp[i-2];
}
cin>>C;
while( C--)
{
cin>>n;
cout<<dp
<<endl;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: