码迷,mamicode.com
首页 > 其他好文 > 详细

9271:奶牛散步

时间:2017-07-03 12:01:44      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:img   cout   get   更新   include   ace   结束   数列   div   

---恢复内容开始---

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 }

 

---恢复内容结束---

9271:奶牛散步

标签:img   cout   get   更新   include   ace   结束   数列   div   

原文地址:http://www.cnblogs.com/InfoEoR/p/7109762.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!