JZYZOJ 1542 [haoi2015]str 矩阵乘法 dp

Posted 鲸头鹳

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JZYZOJ 1542 [haoi2015]str 矩阵乘法 dp相关的知识,希望对你有一定的参考价值。

http://172.20.6.3/Problem_Show.asp?id=1542

dp+矩阵乘法思路hin好想,对于我这种题目稍微学术就几乎什么也不会的人来说唯一的难点在于读题,因为一心想着划水题目没有看清楚,样例wa了一会最后仔细读题发现自己g的操作看错了,非常智障了

代码

 

技术分享
 1 #include<iostream>  
 2 #include<cstdio>  
 3 #include<cstring>  
 4 #include<algorithm> 
 5 #include<cmath>
 6 using namespace std;
 7 const int maxn=510;
 8 const long long modn=998244353;
 9 char ch[maxn];
10 int m,n;
11 struct mat{
12     long long e[7][7];
13     mat(){memset(e,0,sizeof(e));}
14     void cle(){
15         for(int i=1;i<=m;i++)e[i][i]=1;
16     }
17 };mat ten[20],f[maxn][maxn],g[maxn];
18 mat mul(mat x,mat y){
19     mat z;
20     for(int i=1;i<=m;i++){
21         for(int j=1;j<=m;j++){
22             for(int k=1;k<=m;k++){
23                 z.e[i][j]+=x.e[i][k]*y.e[k][j];
24                 z.e[i][j]%=modn;
25             }
26         }
27     }
28     return z;
29 }
30 mat plu(mat x,mat y){
31     mat z;
32     for(int i=1;i<=m;i++){
33         for(int j=1;j<=m;j++){
34             z.e[i][j]=x.e[i][j]+y.e[i][j];
35             z.e[i][j]%=modn;
36         }
37     }
38     return z;
39 }
40 mat pow(mat x,long long k){
41     mat z;z.cle();
42     while(k){
43         if(k&1)z=mul(x,z);
44         k/=2;x=mul(x,x);
45     }
46     return z;
47 }
48 int main(){
49     scanf("%s%d",&ch,&m);n=strlen(ch);
50     ten[0].cle();
51     for(int i=1;i<m;i++)ten[1].e[i][i+1]=1;
52     for(int i=1;i<=m;i++)ten[1].e[m][i]=1;
53     for(int i=2;i<=9;i++)ten[i]=pow(ten[1],i);
54     for(int i=n;i>=1;i--){
55         f[i][i-1].cle();
56         for(int j=i;j<=n;j++){
57             int z=ch[j-1]-0;
58             f[i][j]=mul(pow(f[i][j-1],10),ten[z]);
59         }
60     }g[n+1].cle();
61     for(int i=n;i>=1;i--){
62         for(int j=i;j<=n;j++){
63             g[i]=plu(g[i],mul(g[j+1],f[i][j]));
64         }
65     }
66     printf("%I64d\n",g[1].e[m][m]);
67     return 0;
68 }
View Code

 

以上是关于JZYZOJ 1542 [haoi2015]str 矩阵乘法 dp的主要内容,如果未能解决你的问题,请参考以下文章

JZYZOJ1540 BZOJ4035 [ haoi2015 上午] T3 博弈论 sg函数 分块

JZYZOJ1537 [haoi2014]贴海报

JZYZOJ1536 [haoi2014]走出金字塔

JZYZOJ1525 HAOI2012道路 堆优化的dijkstra+pair

JZYZOJ1535 [haoi2014]穿越封锁线

JZYZOJ1527 [haoi2012]高速公路 线段树 期望