问题描述
有一长度为 N(1<=N<=10)的地板,给定三种不同瓷砖:一种长度为 1,一种长度为 2,另一种长度为 3,数目不限。要将这个长度为 N 的地板铺满, 并且要求长度为 1 的瓷砖 不能相邻,一共有多少种不同的铺法?
例如,长度为 4 的地板一共有如下 4 种铺法:
4=1+2+1
4=1+3
4=2+2
4=3+1
只有一个数 N,代表地板的长度。
输出格式
方案总数。
样例输入
4
样例输出
有一长度为 N(1<=N<=10)的地板,给定三种不同瓷砖:一种长度为 1,一种长度为 2,另一种长度为 3,数目不限。要将这个长度为 N 的地板铺满, 并且要求长度为 1 的瓷砖 不能相邻,一共有多少种不同的铺法?
例如,长度为 4 的地板一共有如下 4 种铺法:
4=1+2+1
4=1+3
4=2+2
4=3+1
编程求解上述问题。
第一种
输入格式只有一个数 N,代表地板的长度。
输出格式
方案总数。
样例输入
4
样例输出
4
动态规划
n表示长度
最后一块不是1 (则是2或3) | 最后一块是1 |
总共 |
f_not1(1)=0 |
f_1(1)=1 |
f(1) |
f_not1(2)=1 |
f_1(2)=0 |
f(2) |
f_not1(3)=2 |
f_1(3)=1 |
f(3) |
f_not1(4)=f(1)+f(2) 铺满1块地板的数量(再铺一块3)+ 铺满2块地板的数量(再铺一块2) |
f_1(4)=f_not1(3) 最后一块不是1的f_not1(3) |
f(4) |
f_not1(5)=f(2)+f(3) 铺满2块地板的数量(再铺一块3)+ 铺满3块地板的数量(再铺一块2) |
f_1(5)=f_not1(4) 最后一块不是1的f_not1(4) |
f(5) |
f_not1(6)=f(3)+f(4)</ |