[R48C]工厂生产
对于 的数据,,。
思路
把产品对零件的消耗表 与零件对原料的消耗表 都看作 矩阵。生产 个「产品 」需要的「原料 」总数,等于把所有零件 的消耗量乘上该零件对原料 的消耗量后求和:
这正是矩阵乘法 ,直接套用三重循环计算即可。
复杂度
- 时间:, 时约为 次运算。
- 空间:,存储三个 矩阵。
- 数值:单个 最大为 ,
Int64完全安全。
仓颉实现
import std.env.*
import std.convert.*
main(): Int64 {
let reader = getStdIn()
let n = Int64.parse(reader.readln().getOrThrow())
let nn = n
// 读入矩阵 a:n 行,每行 n 个整数
var a = Array<Array<Int64>>(nn, { _ =>
reader.readln().getOrThrow().split(" ", removeEmpty: true).map({ p: String => Int64.parse(p) })
})
// 读入矩阵 b:n 行,每行 n 个整数
var b = Array<Array<Int64>>(nn, { _ =>
reader.readln().getOrThrow().split(" ", removeEmpty: true).map({ p: String => Int64.parse(p) })
})
// 矩阵乘法 c = a * b
var sb = StringBuilder()
for (i in 0..nn) {
for (l in 0..nn) {
var sum: Int64 = 0
for (j in 0..nn) {
sum += a[i][j] * b[j][l]
}
sb.append(sum.toString())
if (l + 1 < nn) {
sb.append(" ")
}
}
sb.append("\n")
}
print(sb.toString())
return 0
}