您的位置:首页 > 其它

矩阵乘法(摆花)

2015-09-28 19:53 197 查看
摆花
【问题描述】
艺术馆门前将摆出许多花,一共有 n 个位置排成一排,每个位置可以摆花也
可以不摆花。有些花如果摆在相邻的位置(隔着一个空的位置不算相邻),就不
好看了。假定每种花数量无限,求摆花的方案数。
【输入】输入文件名为(flowers.in)
输入有 1+m 行,第一行有两个用空格隔开的正整数 n、 m, m 表示花的种类数。接
下来的 m 行,每行有 m 个字符 1 或 0, 若第 i 行第 j 列为 1,则表示第 i 种花和第
j 种花不能排在相邻的位置,输入保证对称。(提示:同一种花可能不能排在相
邻位置)。
【输出】输出文件名为(flowers.out)
输出只有一个整数,为方案数(这个数字可能很大,请输出方案数除以
1000000007 的余数)。
flowers.in flowers.out
2 2
01
10
7
样例解释
七种方案为(空,空) 、(空, 1)、( 1、空)、( 2、空)、(空、 2)、( 1,1)、( 2,2)
数据范围与约定
对于 20%的数据, 1<n≤5,0<m≤10。
对于 60%的数据, 1<n≤200,0<m≤100。
对于 100%的数据, 1<n≤1000000000, 0<m≤100。

很容易知道dp公式为f[i][j]+=f[i-1][k](map[k][j]==0)

由于n很大,这时就用到矩阵乘法。

f[i][0]  f[i-1][0] 1 1 1

f[i][1] = f[i-1][1]*1 1 0

f[i][2]  f[i-1][2] 1 0 1

可以发现,乘上的这个矩阵就是输入的矩阵,任何不摆花可以和所有花相邻。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  矩阵乘法