HDU 5366:The mook jong 遞推
阿新 • • 發佈:2017-05-17
hdu ons accep ucc soft cst stream mil overflow
輸出描寫敘述
The mook jong
Accepts: 506 Submissions: 1281 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) 問題描寫敘述ZJiaQ為了強身健體。決定通過木人樁練習武術。輸入描寫敘述ZJiaQ希望把木人樁擺在自家的那個由1*1的地磚鋪成的1*n的院子裏。
因為ZJiaQ是個強迫癥,所以他要把一個木人樁正好擺在一個地磚上,因為木人樁手比較長。所以兩個木人樁之間地磚必須大於等於兩個,如今ZJiaQ想知道在至少擺放一個木人樁的情況下,有多少種擺法。
輸入有多組數據。每組數據第一行為一個整數n(1 < = n < = 60)
對於每組數據輸出一行表示擺放方案數輸入例子
1 2 3 4 5 6輸出例子
1 2 3 5 8 12這個題目有一個遞推關系就是f[n]=f[n-1]+f[n-3]+1 怎麽來的呢。就是當1*n-1個格子擴展到1*n的格子時, 當多出來的那一個格子為0時,數量=f[n-1] 當多出來的那一個格子為1時,數量=f[n-3]再加上新來的那個為1的格子,多了一種排法,即f[n-3]+1 事實上一個循環全然能夠做,但當時著急對著這個公式寫了一個遞歸,結果到五十幾的時候出不來結果 ,太慢了,索性由於輸入也不多就直接打表。。。 代碼:
#include <iostream> #include <algorithm> #include <cmath> #include <vector> #include <string> #include <cstring> #pragma warning(disable:4996) using namespace std; int num; long long a[65]; int main() { a[1]=1; a[2]=2; a[3]=3; a[4]=5; a[5]=8; a[6]=12; a[7]=18; a[8]=27; a[9]=40; a[10]=59; a[11]=87; a[12]=128; a[13]=188; a[14]=276; a[15]=405; a[16]=594; a[17]=871; a[18]=1277; a[19]=1872; a[20]=2744; a[21]=4022; a[22]=5895; a[23]=8640; a[24]=12663; a[25]=18559; a[26]=27200; a[27]=39864; a[28]=58424; a[29]=85625; a[30]=125490; a[31]=183915; a[32]=269541; a[33]=395032; a[34]=578948; a[35]=848490; a[36]=1243523; a[37]=1822472; a[38]=2670963; a[39]=3914487; a[40]=5736960; a[41]=8407924; a[42]=12322412; a[43]=18059373; a[44]=26467298; a[45]=38789711; a[46]=56849085; a[47]=83316384; a[48]=122106096; a[49]=178955182; a[50]=262271567; a[51]=384377664; a[52]=563332847; a[53]=825604415; a[54]=1209982080; a[55]=a[54]+a[52]+1; a[56]=a[55]+a[53]+1; a[57]=a[56]+a[54]+1; a[58]=a[57]+a[55]+1; a[59]=a[58]+a[56]+1; a[60]=a[59]+a[57]+1; while(cin>>num) { cout<<a[num]<<endl; } return 0; }
HDU 5366:The mook jong 遞推