BZOJ 1009 [HNOI2008]GT考试 矩阵乘法+DP
2013-03-05 21:00
381 查看
题解:
dp[i][j]表示长度为i,匹配了j个的方案数,压缩成矩阵,转移即可。
View Code
dp[i][j]表示长度为i,匹配了j个的方案数,压缩成矩阵,转移即可。
View Code
#include <iostream> #include <cstring> #include <cstdlib> #include <cstdio> #include <algorithm> #define SIZE 21 using namespace std; struct MT { int x,y; int mt[SIZE][SIZE]; void prt() { for(int i=0;i<=x;i++){ for(int j=0;j<=y;j++) printf("%d ",mt[i][j]);puts("");} } }ans,zy; int n,m,mod; char a[SIZE],b[SIZE],c[SIZE]; int len,lenc; inline MT operator *(MT a,MT b) { MT c; memset(c.mt,0,sizeof c.mt); c.x=a.x; c.y=b.y; for(int i=0;i<=c.x;i++) for(int j=0;j<=c.y;j++) { for(int k=0;k<=a.y;k++) c.mt[i][j]+=a.mt[i][k]*b.mt[k][j]; c.mt[i][j]%=mod; } return c; } inline void read() { scanf("%d%d%d",&n,&m,&mod); scanf("%s",a+1); } inline void getstring(int x,int y) { len=0; for(int i=1;i<=x;i++) b[++len]=a[i]; b[++len]=y; } inline void getsuf(int x) { lenc=0; for(int i=len-x+1;i<=len;i++) c[++lenc]=b[i]; } inline bool check() { for(int i=1;i<=lenc;i++) if(a[i]!=c[i]) return false; return true; } inline void prep() { for(int i=0;i<m;i++) for(int j=0;j<=9;j++) { getstring(i,j+'0'); for(int k=len;k>=0;k--) { if(k==m) { getsuf(k); if(check()) break; else continue; } getsuf(k); if(check()) {zy.mt[k][i]++;break;}//转移反过来写!! } } zy.x=zy.y=m-1; ans.x=m-1; ans.y=0; ans.mt[0][0]=1; } inline void go() { prep(); while(n) { if(n&1) ans=zy*ans; zy=zy*zy; n>>=1; } int res=0; for(int i=0;i<m;i++) res+=ans.mt[i][0]; cout<<res%mod<<endl; } int main() { read(),go(); return 0; }
相关文章推荐
- [BZOJ 1009] [HNOI2008] GT考试 【AC自动机 + 矩阵乘法优化DP】
- BZOJ 1009 [HNOI2008]GT考试 ——矩阵乘法 KMP
- 【BZOJ1009】GT考试(HNOI2008)-DP矩阵优化+KMP
- 【bzoj1009】[HNOI2008]GT考试 矩阵+kmp+DP
- [HNOI2008]BZOJ1009 GT考试 - 动态规划 - 矩阵乘法 - KMP
- _bzoj1009 [HNOI2008]GT考试【矩阵加速dp】
- [KMP DP 矩阵快速幂加速] BZOJ 1009 [HNOI2008]GT考试
- 1009: [HNOI2008]GT考试 矩阵乘法优化DP+KMP
- [矩阵乘法+KMP] BZOJ1009: [HNOI2008]GT考试
- [BZOJ 1009][HNOI2008]GT考试(KMP+线性齐次递推的矩阵加速?+DP)
- bzoj1009: [HNOI2008]GT考试 矩阵乘法
- BZOJ1009: [HNOI2008]GT考试 矩阵快速幂+kmp+dp
- [bzoj 1009] [HNOI2008]GT考试:DP,单串AC自动机,矩阵快速幂
- [BZOJ1009]HNOI2008 GT考试|KMP|递推|矩阵乘法
- BZOJ_1009_[HNOI2008]GT考试_KMP+矩阵乘法
- [bzoj1009][HNOI2008]GT考试——KMP+矩阵乘法
- 【BZOJ1009】【HNOI2008】GT考试 AC自动机+矩阵乘法
- [bzoj1009][kmp][DP][矩阵乘法]GT考试
- bzoj 1009: [HNOI2008]GT考试(AC自动机+矩阵优化dp)
- BZOJ 1009 [HNOI2008]GT考试 AC自动机+矩阵乘法