CodeForce 887 div.2 B. Fibonaccharsis 題解

題意給定斐波那契數(shù)列的長度為k,指定f[k]==n時 有多少中組合方法
知道 f[3]=f[1]+f[2] f[4]=f[1]+2*f[2] f[5]=2*f[1]+3*f[2]
所以可以看出來每一個f[i]都是由?w1個f[1]和w2個f[2]組成
所以假設(shè)k=3時????f[3]=f[1]+f[2] 我們只需要枚舉f[1]和f[2]的值即可,但是由于題干中要求非減序列所以有個要求就是 f[2]<=f[3] f[1]<=f[2]?
可得?f[1]+f[2]==n 所以枚舉f[1]時 f[2]=n-f[1],?可以得到 f[1]<=n-f[1] 即f[1]<=n/2 所以我們只需要在[0,n/2]的區(qū)間內(nèi)枚舉f[1]即可
同理 k=4時 f[1]<=n/3 n=2*f[2]+f[1]? f[2]=(n-f[1])/2 每當(dāng)枚舉f[1]時 (n-f[1])%2==0時便可以得到一個合法解
以此類推發(fā)現(xiàn)枚舉的f[1]的范圍和f[2]的余數(shù)也是斐波那契數(shù)列即
0 1 1 2 3 5 8 13...? ?
代碼
標(biāo)簽: