问题描述 我们把一个数称为有趣的,当且仅当: 输入格式输入只有一行,包括恰好一个正整数n (4 ≤ n ≤ 1000)。 输出格式输出只有一行,包括恰好n 位的整数中有趣的数的个数除以1e9 + 7的余数。 题解分析:首先要包含0 1 2 3,所以1和3不可能放在第一个,而首位不可以放0,所以第一次读到2才有可能是正确的,才有资格转入下一个状态。不管有多少个 状态定义s0.只包含数字2,记为S1 s1.只包含数字2和0(0开始的数0个,以此数为前缀的数均不是以0开始),记为S2 s2.只包含数字2和3,记为S3 s3.只包含数字2、0和1,并且满足所有0在1之前,记为S4 s4.只包含数字2、0和3,并且满足所有2在3之前,记为S5 s5.包含任意数字(包含0、1、2和3),满足所有0在1之前,满足所有2在3之前,记为S6 状态转移:i位状态5的计算:考虑在i-1位时有三种状态可以到达状态5: 第3种,此时只能在i位填3,所以*1; 第4种,此时只能在i位填1,所以*1 第5种,此时能在i位填2或3,所以*2 1.对于S1,考虑其长度l,定义f(l,S1)为长度l的S1数的数量 f(l,S1)=1。也就是说长度为l的只包含2的数只有1个。 2.对于S2,考虑其长度l,定义f(l,S2)为长度l的S2数的数量 当l=1则那么f(l,S2)=0 当l>1则f(l,S2)=f(l-1,S2)*2+f(l-1,S1)。 3.对于S3,考虑其长度l,定义f(l,S3)为长度l的S3数的数量, 当l=1则那么f(l,S3)=0,即那么f(1,S3)=0, 当l>1则f(l,S3)=f(l-1,S3)*2+f(l-1,S1)。 4.对于S4,考虑其长度l,定义f(l,S4)为长度l的S4数的数量, 当l=1则那么f(l,S4)=0,即f(1,S4)=0, 当l>1则f(l,S4)=f(l-1,S4)*2+f(l-1,S2)+f(l-1,S3)。 |
201312-4有趣的数 最详细解释
于 2024-03-28 23:32:17 首次发布