【发布时间】:2021-04-10 22:16:08
【问题描述】:
我有以下我无法弄清楚的动态编程问题。
基本上你有一张这样的表格,它表示计算机 X 完成 Y 任务所需的时间(ordi 表示计算机)。
在这种情况下,计算机 1 完成 1 项任务需要 7 秒,完成 2 项任务需要 10 秒,以此类推。
计算机 2 完成 1 个任务需要 8 秒,完成 2 个任务需要 9 秒,以此类推。
现在,我想编写一个动态编程算法,它会告诉我计算机 1 和 2 完成 3 个任务所需的最短时间,或计算机 1、2 和 3 完成 5 个任务所需的最短时间,等等
记住 2 个限制:涉及的每台计算机必须至少分配有 1 个任务,并且所有 6 个任务必须分发.例如,您不能使用计算机 1 和 2 完成 1 项任务,就像您不能使用 3 台计算机完成少于 3 项任务的方式一样(并且每台计算机都必须有一项任务)。
我的(几乎可以工作的)(Rust)代码如下,但它没有给出正确的数字,但是,谁能得到它来给出正确的解决方案?
let costs = [
[7, 10, 14, 20, 21, 30],
[8, 9, 15, 10, 18, 20],
[9, 9, 16, 28, 30, 40],
[11, 15, 20, 30, 35, 20],
];
let mut optimal = vec![vec![999999999; costs[0].len()]; costs.len()];
for j in 0..costs[0].len() {
optimal[0][j] = costs[0][j];
}
for i in 1..optimal.len() {
for j in i..optimal[i].len() {
let mut min = 999999999;
for k in 0..j {
let c = optimal[i - 1][j - k] + costs[i][k];
min = std::cmp::min(c, min);
}
optimal[i][j] = min;
}
}
【问题讨论】:
标签: algorithm rust dynamic-programming