---恢复内容开始---
9271:奶牛散步
- 总时间限制:
- 10000ms
- 单个测试点时间限制:
- 1000ms
- 内存限制:
- 131072kB
- 描述
-
从一个无限大的矩阵的中心点出发,一步只能向右走、向上走或向左走。恰好走N步且不经过已走的点
共有多少种走法? - 输入
-
一个数字,代表N,N<=1000 - 输出
-
输出有多少方案 - 样例输入
-
2
- 样例输出
-
7 由图,把方案数看作一棵树,f[n]表示到第n步有多少种走法,易得f[n]为x个三步+y个两步的和,而x的值等于f[n-1]的值(看图),通过相减得y的值为f[n-1]-f[2],所以这道题用递推,起始条件是f[1]=3,f[2]=7;用类似于斐波拉契数列的算法就能AC了.
这里上dalaoZX的代码(不开数组);
1 #include<iostream> 2 #include<iomanip> 3 #include<cstdio> 4 #include<cmath> 5 #include<cstdlib> 6 #include<cstring> 7 #include<algorithm> 8 using namespace std; 9 int main() 10 { 11 int n; 12 int i; 13 int fn_1,fn_2; 14 scanf("%d",&n); //输入任意n值 15 int fn=0; 16 if(n==1) 17 fn=3; //初始化当n=1和n=2时的临界条件 18 else if(n==2) 19 fn=7; 20 else 21 { 22 fn_1=7; 23 fn_2=3; 24 for(i=3; i<=n; i++) 25 { 26 fn=(2*fn_1+fn_2)%12345; //当n>=3时fn的通式 27 fn_2=fn_1%12345;//更新fn_1和fn_2的值 28 fn_1=fn%12345; 29 } 30 } 31 cout<<fn; 32 return 0; 33 }
---恢复内容结束---
时间: 2024-10-13 13:47:29