1. 程式人生 > >[Luogu P4451] [BZOJ 2173] [國家集訓隊]整數的lqp拆分

[Luogu P4451] [BZOJ 2173] [國家集訓隊]整數的lqp拆分

洛谷傳送門

BZOJ傳送門

題目描述

lqp在為出題而煩惱,他完全沒有頭緒,好煩啊…

他首先想到了整數拆分。整數拆分是個很有趣的問題。給你一個正整數 N N ,對於 N N 的一個整數拆分就是滿足任意 m

> 0 m>0 a 1 , a 2
, a 3 a m > 0
a_1 ,a_2 ,a_3…a_m>0
,且 a 1 + a 2 + a 3 + + a m = N a_1+a_2+a_3+…+a_m=N 的一個有序集合。通過長時間的研究我們發現了計算對於 N N 的整數拆分的總數有一個很簡單的遞推式,但是因為這個遞推式實在太簡單了,如果出這樣的題目,大家會對比賽毫無興趣的。

然後lqp又想到了斐波那契數。定義 F 0 = 0 , F 1 = 1 , F n = F n 1 + F n 2 ( n > 1 ) F_0=0,F_1=1,F_n=F_n-1+F_n-2 (n>1) F n F_n 就是斐波那契數的第 n n 項。但是求出第 n n 項斐波那契數似乎也不怎麼困難… lqp為了增加選手們比賽的慾望,於是絞盡腦汁,想出了一個有趣的整數拆分,我們暫且叫它:整數的lqp拆分。

和一般的整數拆分一樣,整數的lqp拆分是滿足任意 m > 0 m>0 a 1 , a 2 , a 3 a m > 0 a_1 ,a_2 ,a_3…a_m>0 ,且 a 1 + a 2 + a 3 + + a m = N a_1+a_2+a_3+…+a_m=N 的一個有序集合。但是整數的lqp拆分要求的不是拆分總數,相對更加困難一些。

對於每個拆分,lqp定義這個拆分的權值 F a 1 F a 2 F a m F_{a1}F_{a2}…F_{am} ,他想知道對於所有的拆分,他們的權值之和是多少?

簡單來說,就是求
i = 1 m F a i \sum\prod_{i=1}^m F_{a_i}
m > 0 m>0
a 1 , a 2 . . . a m > 0 a_1,a_2...a_m>0
a 1 + a 2 + . . . + a m = N a_1+a_2+...+a_m=N

由於這個數會十分大,lqp稍稍簡化了一下題目,只要輸出對於 N N 的整數lqp拆分的權值和 m o d ( 1 0 9 + 7 ) mod (10^9+7) 輸出即可。

輸入輸出格式

輸入格式:

輸入的第一行包含一個整數 N N N 1 0 6 N \le 10^6 )。

輸出格式:

輸出一個整數,為對於 N N 的整數lqp拆分的權值和 m o d ( 1 0 9 + 7 ) mod (10^9+7)

輸入輸出樣例

輸入樣例#1:

3

輸出樣例#1:

5

說明

F 0 = 0 , F 1 = 1 , F 2 = 1 , F 3 = 2 F_0=0,F_1=1,F_2=1,F_3=2
對於 N = 3 N=3 ,有這樣幾種lqp拆分:
3 = 1 + 1 + 1 3=1+1+1 , 權值是 1 1 1 = 1 1*1*1=1
3 = 1 + 2 3=1+2 ,權值是 1 2 = 2 1*2=2
3 = 2 +