20241111 finished.
This commit is contained in:
parent
0f1f6ad5fa
commit
7f52800da1
|
@ -308,3 +308,5 @@ mod p3235_check_if_the_rectangle_corner_is_reachable;
|
|||
mod p3242_design_neighbor_sum_service;
|
||||
|
||||
mod p540_single_element_in_a_sorted_array;
|
||||
|
||||
mod p1547_minimum_cost_to_cut_a_stick;
|
||||
|
|
45
src/problem/p1547_minimum_cost_to_cut_a_stick.rs
Normal file
45
src/problem/p1547_minimum_cost_to_cut_a_stick.rs
Normal file
|
@ -0,0 +1,45 @@
|
|||
/**
|
||||
* [1547] Minimum Cost to Cut a Stick
|
||||
*/
|
||||
pub struct Solution {}
|
||||
|
||||
// submission codes start here
|
||||
|
||||
impl Solution {
|
||||
pub fn min_cost(n: i32, cuts: Vec<i32>) -> i32 {
|
||||
let m = cuts.len();
|
||||
|
||||
let mut cuts = cuts;
|
||||
cuts.sort_unstable();
|
||||
cuts.insert(0, 0);
|
||||
cuts.push(n);
|
||||
|
||||
let mut dp = vec![vec![0; m + 2]; m + 2];
|
||||
|
||||
for i in (1..=m).rev() {
|
||||
for j in i..=m {
|
||||
dp[i][j] = if i == j { 0 } else { i32::MAX };
|
||||
|
||||
for k in i..=j {
|
||||
dp[i][j] = dp[i][j].min(dp[i][k - 1] + dp[k + 1][j]);
|
||||
}
|
||||
dp[i][j] += cuts[j + 1] - cuts[i - 1];
|
||||
}
|
||||
}
|
||||
|
||||
dp[1][m]
|
||||
}
|
||||
}
|
||||
|
||||
// submission codes end
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_1547() {
|
||||
assert_eq!(16, Solution::min_cost(7, vec![1, 3, 4, 5]));
|
||||
assert_eq!(22, Solution::min_cost(9, vec![5, 6, 1, 4, 2]));
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user