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 }