2025-07-10 14:13:01 +08:00
|
|
|
struct Solution;
|
|
|
|
impl Solution {
|
2025-08-17 22:56:39 +08:00
|
|
|
// return type: all situation, not crash situation
|
|
|
|
pub fn new21_game(n: i32, k: i32, max_pts: i32) -> f64 {
|
|
|
|
let mut mem = vec![0f64; (k + max_pts + 1) as usize];
|
|
|
|
for i in k .. k + max_pts + 1 {
|
|
|
|
mem[i as usize] = if i <= n { 1f64 } else { 0f64 };
|
|
|
|
}
|
|
|
|
let mut temp_ans = 0f64;
|
|
|
|
if(k - 1 >= 0)
|
|
|
|
{
|
|
|
|
let i = k - 1;
|
|
|
|
for j in 1..max_pts + 1 {
|
|
|
|
temp_ans += mem[(i + j) as usize];
|
2025-08-01 10:39:53 +08:00
|
|
|
}
|
2025-08-17 22:56:39 +08:00
|
|
|
mem[i as usize] = temp_ans as f64 / max_pts as f64;
|
|
|
|
}
|
|
|
|
for i in (0..k - 1).rev() {
|
|
|
|
temp_ans += mem[(i + 1) as usize] - mem[(i + max_pts + 1) as usize];
|
|
|
|
mem[i as usize] = temp_ans as f64 / max_pts as f64;
|
2025-07-30 10:59:42 +08:00
|
|
|
}
|
2025-08-17 22:56:39 +08:00
|
|
|
mem[0]
|
2025-07-10 14:13:01 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {
|
2025-08-17 22:56:39 +08:00
|
|
|
let sl = Solution::new21_game(21, 17, 10);
|
2025-07-29 11:20:14 +08:00
|
|
|
println!("{:?}", sl);
|
2025-07-10 14:13:01 +08:00
|
|
|
}
|