解题思路:
先找到一个n的独立整体数目(n为整体表示无法从前面的n-1个当中去凑出2xn)
当n=1时有一个整体(I型)n=2时有一个整体(横放的上下两个I型,竖直放的两个I型是n=1的独立整体拼出来的,所以不算)
n=3时有两个:
n=4时:
n=5 时:
同理当n=6 ,7 ......时同样有两个
则有:
F[n] = F[n-1] + F[n-2] + F[n-3]*2 + F[n-4]*2 + ...
F[n-1] = F[n-2] + F[n-3] + F[n-4]*2 + F[n-5]*2 + ...
两式相减有:
F[n] - F[n-1] = F[n-1] + F[n-3]
即F[n] = 2 * F[n-1] + F[n-3]
参考代码:
using namespace std; typedef long long ll; const ll mod = 1000000007; int main(){ //a,b,c初始为n=1 2 3的总方案数,ans记录下一个n值对应的答案 //即F[n] = ans,F[n-1] = c,F[n-2] = b,F[n-3] = a; ll a = 1,b = 1,c = 2,ans; int n; cin>>n; for(int i = 3;i <= n;i++){ ans = (2 * c + a) % mod; a = b;b = c;c = ans; } cout<<ans; return 0; }
0.0分
1 人评分
分糖果 (C++代码)浏览:865 |
蛇行矩阵 (C++代码)(预生成结果以节省每次生成的时间)浏览:819 |
小九九 (C语言代码)浏览:818 |
2005年春浙江省计算机等级考试二级C 编程题(3),复杂度最低的方法没有之一!!!!!浏览:812 |
C语言程序设计教程(第三版)课后习题5.8 (C语言代码)浏览:770 |
C语言训练-自由落体问题 (C语言代码)浏览:1738 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:840 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:607 |
Tom数 (C语言代码)浏览:527 |
小O的乘积 (C语言代码)浏览:1011 |