1 条题解
-
1
比较复杂的,注释都在了,难度
#include<bits/stdc++.h> using namespace std; const int mod=1000000007; int n,f[10000005][3]; //f[i][0]:上方比下方多一格 //f[i][1]:两行积木数相等 //f[i][2]:下方比上方多一格 int main(){ cin>>n; f[0][1]=1; for(int i=1;i<=n;i++){ f[i][0]=(f[i-2][1]+f[i-1][2])%mod;//上方比下方多一格,可以用I横向填补第i列和第i−1列(f[i-1][2]),或者用L直接填补第i列和第i−1列(f[i-2][1]) f[i][1]=((f[i-2][1]+f[i-1][1])%mod+(f[i-1][0]+f[i-1][2])%mod)%mod;//两行积木数相等,可以用两个I横向填补第i列和第i−1列(f[i-2][1]),或者用一个I纵向填补第i列(f[i-1][1]),或者用一个L填补第i列和第i−1列的第二行(f[i-1][0]),或者用一个L填补第i列和第i−1列的第一行(f[i-1][2]) f[i][2]=(f[i-2][1]+f[i-1][0])%mod;//下方比上方多一格,可以用I横向填补第i列和第i−1列(f[i-1][0]),或者用L直接填补第i列和第i−1列(f[i-2][1]) } cout<<f[n][1]; }本题比较坑的点是空间小,开
long long就会(我在某谷也被坑了一遍),所以做题的时候一定要谨慎,防止爆0!
- 1
信息
- ID
- 12769
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 5
- 标签
- 递交数
- 24
- 已通过
- 6
- 上传者