1196:踩方格

踩方格

做了好几个递推题,大多是披着递推的动态规划o(╥﹏╥)o

相对来说这题算是比较正经的递推了(*^▽^*)


 

只要区分开上一轮是从东/西边过来的还是从南边过来的,这题就基本ok了。

如果是从东(西)边过来的,那么这一步只能往西(东)走或者往北走。

如果是从南边过来的,那么这一步可以往东/西/北三个方向走。

将二者区分开(下面代码中表现为区分存储),就能通过递推得知某一步有多少种方案了!

 1 #include<iostream>
 2 using namespace std;
 3 
 4 const int N=25;
 5 int a[N],b[N];
 6 int main(){
 7     int n;
 8     cin>>n;
 9     //a表示往东/西走的总方案,b表示往北走的总方案
10     a[1]=2,b[1]=1;
11     for(int i=2;i<=n;i++){
12         a[i]=b[i-1]*2+a[i-1];
13         b[i]=a[i-1]+b[i-1];
14     }
15     cout<<a[n]+b[n];
16     return 0;
17 }

 

posted @ 2021-08-03 18:12  Rekord  阅读(271)  评论(0编辑  收藏  举报