解题思路:
https://www.bilibili.com/video/BV18i4y1D7cJ?spm_id_from=333.999.0.0
1:05:00开始看
map[j][k] 相当于是一张表格,如果左边一列开始是已j的状态的,那么k为该状态下的放法
a[i][k] 表示第i列时所处于的k种状态
所以当i+1时若要处于的k状态,就要看前一列出与j状态的情况下,是否在map中能找到,使得格子能从第j中状态转换到第k中状态的方式。
f开空间可能会过大,用循环数组,&1相当于%2;
看代码的大佬能讲解一下为什么将 int f[2][4]放在主函数里面会报错吗?
参考代码:
#include<iostream> #include<cstring> using namespace std; int map[4][4]={ {1,1,1,1}, {0,0,1,1}, {0,1,0,1}, {1,0,0,0}, }; int f[2][4]; int main() { int n; cin>>n; f[1][0]=1; for(int i=1;i<=n;i++) { memset(f[(i+1)&1],0,sizeof(f[0])); for(int j=0;j<4;j++) { for(int k=0;k<4;k++) { f[(i+1)&1][k]=(f[(i+1)&1][k]+f[i&1][j]*map[j][k])%1000000007; } } } cout<<f[(n+1)&1][0]<<endl; return 0; }
0.0分
2 人评分
C语言程序设计教程(第三版)课后习题5.5 (C语言代码)浏览:555 |
1012题解浏览:864 |
剪刀石头布 (C++代码)浏览:1706 |
陈教主的三角形 (C语言代码)浏览:1141 |
C语言程序设计教程(第三版)课后习题9.2 (C语言代码)浏览:607 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:485 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:567 |
WU-C语言程序设计教程(第三版)课后习题12.5 (C++代码)浏览:960 |
C语言考试练习题_一元二次方程 (C++代码)浏览:962 |
母牛生小牛 (C语言代码)浏览:991 |