能力值:
( LV2,RANK:10 )
|
-
-
2 楼
只要有算法就行了,请赐教
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
一.
f(1) = 1
f(2) = 2 (一次走??,或走?次一?)
f(3) = 4 (1,1,1或1,2或2,1或3)
f(n) = f(n-1) 最後一步走一?
f(n-2) 最後一步走??
f(n-3) 最後一步走三?
所以,程式用哝?(recursive)去????容易的
|
能力值:
(RANK:1010 )
|
-
-
4 楼
第二个问题:
F(n) = C ( 2 * n, n) / ( n + 1 )
组合数学问题( 其中的C表示组合)
F(n)即 "Catalan数"
|
能力值:
( LV7,RANK:140 )
|
-
-
5 楼
DWORD CalcStep(UINT nStep)
{
//不验证数据超出边界、不考虑运行效率
//经测试,程序在我的机器上运行时超过30阶就容易没响应
DWORD dwRet = nStep;
if (nStep == 3)
{
dwRet = 4;
}
else if (nStep > 3)
{
DWORD ret1 = CalcStep(nStep - 1);
DWORD ret2 = CalcStep(nStep - 2);
DWORD ret3 = CalcStep(nStep - 3);
dwRet = ret1 + ret2 + ret3;
}
return dwRet;
}
怀疑3楼的算法没有排除重复的走法
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
如果只是要?算 f(n), 不需要用到 recursive
我是指要列出每一肺走法?, 可用 recursive
如果只要f(n)的值的?
step[1] = 1;
step[2] = 2;
step[3] = 4;
for(i=4;i<=30;i++)
{
step[i] = step[i-1]+step[i-2]+step[i-3];
}
就可以了
如果用recursive去算f(n),那?重妖?算相同的f(n)很多次
?然,也可以不用recursive,而用?似上面的方法?列出每一肺走法,但是需要大量的空殓就是了
1: 1
2: 2
3: 4
4: 7
5: 13
6: 24
7: 44
8: 81
9: 149
10: 274
11: 504
12: 927
13: 1705
14: 3136
15: 5768
16: 10609
17: 19513
18: 35890
19: 66012
20: 121415
21: 223317
22: 410744
23: 755476
24: 1389537
25: 2555757
26: 4700770
27: 8646064
28: 15902591
29: 29249425
30: 53798080
呃???成樘的相?快,30肓已?是?相?大的?字了
|
能力值:
( LV7,RANK:140 )
|
-
-
7 楼
哦,不好意思,我不知道recursive是什么东东:)
这个有没有提高效率的办法?
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
recursive 台?叫做哝?
大???是叫哝?吧? 我不催定
要提高效率的?
基本上是空殓??殓,或?殓?空殓的啉?
如果有很多空殓的?,
去硷? n-1, n-2, n-3 肓的每一肺走法
那?只要前面加上1,2,3
就可以褚上( O(1) )列出n肓的每一肺走法
|
能力值:
( LV7,RANK:140 )
|
-
-
9 楼
我想了很久也只是想出来这个办法。。。就是一个一个记下来,哈哈
那样递归就没有意义了:(
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
多谢版主和各位兄弟,小弟又学到了一些东西
|
能力值:
( LV9,RANK:170 )
|
-
-
11 楼
第二题我是这样想的,不知道对不对(数学没学好,^_^)
选择进入栈的车,可以选1,2,3...一直到(N-1)辆车进入,进入后的车的顺序是不变的,并且需要等到前面的车出去了以后才能出栈,所以从栈出来的顺序也是不变的了应该是C(N-1 , 0)+C(N-1 , 1)+C(N-1 , 2)+...+C(N-1 , N-1)=POWER(2 , N-1)
(去掉1是因为最后一辆车不用入栈)
而没有入栈的车的顺序是不变的
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
HOHO 找着一学习的好地方
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
好啊!学到知识了!
|
|
|