- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
HDU2604Queuing矩阵乘法
HDU 2604 Queuing 矩阵乘法
By
baiyun
– 2011 年 8 月 9 日Posted in: ACM, 矩阵乘法
题目的意思比较简单, 就是给出一组由1, 0 组成的长为 L 的序列, 其中
不能出现”111″ 和 “101″ 子序列. 问这样的长L的序列有多少种.
解题:
假设 S 是已有的合法序列, 那么它的后缀只能是 : F1 = 000, F2 = 001,
F3 = 010, F4 = 100, F5 = 011, F6 = 110 中的一种, 现在往S后接一个
字符, 有 2种选择 : 1 或者 0. 定义 DP[N][i] 表示长为N的序列的第i种
状态包含的合法序列的数目, 那么可以得到如下状态转移关系:
DP[N][1] = DP[N-1][1] + DP[N-1][4];
DP[N][2] = DP[N-1][1] + DP[N-1][4];
DP[N][3] = DP[N-1][2];
DP[N][4] = DP[N-1][3] + DP[N-1][6];
DP[N][5] = DP[N-1][2];
DP[N][6] = DP[N-1][5];
那么可以依此构造出矩阵 A , B = DP[3] :
这样, 就可以得到 DP[4] = A * B , DP[5] = A^2 * B …..
最后用2分快速幂就能很快得到答案.
#ifdef LOCAL
#define SP system(pause);
#define DBG Debug();
#else
#define SP
#define DBG
#endif
void Debug () {
freopen ( 1.in, r, stdin );
freopen ( 1.out, w, stdout );
}
#define MEM(x,y) memset(x,y,sizeof(x))
int N, M, K, fuck[5];
struct Mat {
int n, m, mat[33][33];
Mat ( int nn = 0, int mm = 0 ) {
n = nn, m = mm; MEM(mat,0);
}
Mat operator * ( const Mat t ) {//矩阵乘法
Mat res ( n );
for ( int i = 0; i n; ++ i ) {
for ( int j = 0; j n; ++ j ) {
for ( int k = 0; k n; ++ k ) {
res.mat[j][i] += mat[j][k] * t.mat[k][i];
} res.mat[j][i] %= M;
}
}
return res;
}
void print () {//输出矩阵
for ( int i = 0; i n; ++ i ) {
for ( int j = 0; j n; ++ j ) {
printf ( j ? %d : %d, mat[i][j]%M );
} puts ( );
}
}
};
Mat Pow ( Mat A, int k ) {// 求ak^k
if ( k == 1 ) return A;
Mat res = Pow ( A, k1 );
return k1 ? res * res * A : res * res;
}
void prs ( Mat A, Mat B, int n ) {
Mat res = Pow ( A, n );
res = res * B;
int sum = 0;
for ( int i = 0; i 6; ++ i ) sum += res.mat[i][0];
printf ( %dn, sum % M );
}
void init ( Mat A, Mat B ) {/*初始化*/
A.mat[0][0] = A.mat[0][3] = A.mat[1][0] = A.mat[1][3] = A.mat[2][1] = 1;
A.mat[3][2] = A.mat[3][5] = A.mat[4][1] = A.mat[5][4] = 1;
for ( int i = 0; i 6; ++ i ) B.mat[i][0] = 1;
fuck[0] = 0, fuck[1] = 2, fuck[2] = 4, fuck[3] = 6;
}
int main ()
{
//DBG
Mat A ( 6 ), B ( 6 );
init ( A, B );/*
您可能关注的文档
- 发电机定期保养规程.doc
- 服装公司储运部岗位描述.doc
- 雅思阅读标题题分析.doc
- 李红敏——谁动了我的奶酪.ppt
- 中国邮政速递物流公司业务发展战略分析.ppt
- 9章类和对象.ppt
- CMMI-项目管理-SAM-外包开发过程监控报告模版.doc
- 5函数、函数与运算符重载.ppt
- Acegi配置指南.doc
- 区域生态、资源与可持续发展课件.ppt
- 中考地理真题练习 2024年四川省内江市中考地理真题(解析版).doc
- 中考地理真题练习 2024年河南省中考地理真题(原卷版).doc
- 中考地理真题练习 2024年四川省内江市中考地理真题(原卷版).doc
- 中考地理真题练习 2024年黑龙江省龙东地区中考地理真题(原卷版).doc
- 中考地理真题练习 2024年黑龙江省牡丹江市中考地理真题(原卷版).doc
- 中考地理真题练习 2024年甘肃省武威市临夏州中考地理真题(解析版).doc
- 中考地理真题练习 2024年甘肃省白银市中考地理真题(解析版).doc
- 中考地理真题练习 2024年湖南省中考地理真题(解析版).doc
- DB13_T2694-2018 地理标志产品 兴隆山楂.docx
- 内蒙古巴彦淖尔市2024-2025学年高一下学期期末考试生物含答案.doc
文档评论(0)