代码改变世界

暑假集训(4)第三弹 -----递推(Hdu1799)

2016-08-01 20:45  HUAS_周林微  阅读(167)  评论(0编辑  收藏  举报

问题描述:还记得正在努力脱团的小A吗? 他曾经最亲密的战友,趁他绘制贤者法阵期间,暗中设下鬼打墙将小A

围困,并准备破坏小A正在绘制的法阵。小A非常着急。想阻止他的行动。而要阻止他,必须先破解鬼打墙。

哎,你不得不再次帮助他,告诉他在鬼打墙内应该走多少步。才能打破所有for循环。

 

问题分析:可以利用杨辉三角:1

                                        1    1

                                        1     2    1

                                        1     3     3    1

                                        1     4     6    4   1

                                          ........

                                        1    a[i-1][j]+a[i-1][j] ...............1

先打表,应该不会超时了。

 1 #include "cstdio"
 2 __int64 a[2004][2004];
 3 void abegin()
 4 {
 5     for (int i=0;i<=2003;i++)
 6       for (int j=0;j<=2003;j++)
 7          a[i][j] = 0;
 8     for (int i=1;i<=2003;i++)
 9     {
10       a[i][i] = 1;
11       if (i != 1)
12        for (int j=1;j<=i;j++)
13          a[i][j] = (a[i-1][j] +a[i-1][j-1])%1007;
14     }
15 }
16 int main()
17 {
18     int t,n,m;
19     scanf ("%d",&t);
20     abegin();
21     while (t-- && scanf ("%d%d",&m,&n))
22     {
23           printf ("%d\n",a[n+1][m+1]);
24     }
25     return 0;
26 }
View Code