HDU(2041) (超级楼梯)
2014-02-27 14:58
197 查看
第一次用递归搞,很高兴结果对了(^_^)
悲催的的是提交之后,返回了一个 Time Limit Exceeded
看来递归看似简单,其实相当复杂耗时。递归代码如下:
尼玛,好不容易会用递归搞题了,结果超时,真受打击……不多说了,只有换一种非递归方法解决了:
第m级的走法如果等于第m-1级的走法,下一次只能走一级,只有这一种走法 ;
第m级的走法如果等于第m-2级的走法,下一次只能走两级,只有这一种走法 ;
所以推出公式:
(m)级的走法 = (m-1)级的走法 + (m-2)级的走法
通过这道题感觉到:数学好,才是真的好……
悲催的的是提交之后,返回了一个 Time Limit Exceeded
看来递归看似简单,其实相当复杂耗时。递归代码如下:
#include<iostream> #include<stdio.h> using namespace std ; int count = 0 ; void Search( int m ) { if( m ) { Search( m-1 ) ; if(m-1) Search( m-2 ) ; } else if( m == 0 ) count++ ; } int main() { int n ; while( cin >> n ) { while( n-- ) { int m ; cin >> m ; count = 0 ; Search( m - 1 ) ; cout << count << endl ; } } return 0 ; }
尼玛,好不容易会用递归搞题了,结果超时,真受打击……不多说了,只有换一种非递归方法解决了:
第m级的走法如果等于第m-1级的走法,下一次只能走一级,只有这一种走法 ;
第m级的走法如果等于第m-2级的走法,下一次只能走两级,只有这一种走法 ;
所以推出公式:
(m)级的走法 = (m-1)级的走法 + (m-2)级的走法
#include<iostream> #include<stdio.h> using namespace std ; int main() { int n ; while( cin >> n ) { while( n-- ) { int a[50] = {0 , 0 , 1 , 2} ; int m ; cin >> m ; for(int i = 4 ; i <= m ; i++) a[i] = a[i-2] + a[i-1] ; cout << a[m] << endl ; } } return 0 ; }
通过这道题感觉到:数学好,才是真的好……
相关文章推荐
- HDU 2041 超级楼梯(递推求解)
- HDU 2041 超级楼梯
- HDU 2041 超级楼梯
- HDU 2041--超级楼梯(递推求解)
- Hdu 2041 超级楼梯 简单DP
- HDU-2041-超级楼梯
- hdu 2041 超级楼梯
- HDU_ACM-2041 超级楼梯
- hdu 2041 超级楼梯
- hdu 水题 2041超级楼梯
- HDU 2041:超级楼梯
- HDU 2041 超级楼梯
- HDU 2041 超级楼梯
- HDU_2041 超级楼梯
- HDU 2041 超级楼梯(斐波那契数列)
- HDU 2041 超级楼梯【递推】
- hdu 2041 超级楼梯(递推)
- hdu 2041 超级楼梯(java)
- SDJZU_新生_递推动规_HDU 2041- 超级楼梯
- hdu 2041 超级楼梯