解题思路:
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 人评分
printf基础练习2 (C++代码)(受教了,,%#o和%#x的用途)三人行,必有我师,,多看题解会有收获浏览:1912 |
【绝对值排序】 (C语言代码)浏览:832 |
矩阵乘法 (C++代码)浏览:1662 |
大小写转换 (C语言代码)浏览:904 |
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:790 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:1327 |
求组合数 (C语言代码)浏览:1206 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:552 |
C语言程序设计教程(第三版)课后习题9.6 (C语言代码)浏览:388 |
2^k进制数 (C语言描述,蓝桥杯)浏览:1457 |