写点什么

2022-09-29:在第 1 天,有一个人发现了一个秘密。 给你一个整数 delay ,表示每个人会在发现秘密后的 delay 天之后, 每天 给一个新的人 分享 秘密。 同时给你一个整数 forg

  • 2022 年 9 月 29 日
    北京
  • 本文字数:1219 字

    阅读完需:约 4 分钟

2022-09-29:在第 1 天,有一个人发现了一个秘密。 给你一个整数 delay ,表示每个人会在发现秘密后的 delay 天之后, 每天 给一个新的人 分享 秘密。 同时给你一个整数 forg

2022-09-29:在第 1 天,有一个人发现了一个秘密。给你一个整数 delay ,表示每个人会在发现秘密后的 delay 天之后,每天 给一个新的人 分享 秘密。同时给你一个整数 forget ,表示每个人在发现秘密 forget 天之后会 忘记 这个秘密。一个人 不能 在忘记秘密那一天及之后的日子里分享秘密。给你一个整数 n ,请你返回在第 n 天结束时,知道秘密的人数。由于答案可能会很大,请你将结果对 109 + 7 取余 后返回。输入:n = 4, delay = 1, forget = 3。输出:6。


答案 2022-09-29:


动态规划。带死亡的繁殖问题。


代码用 rust 编写。代码如下:


use std::iter::repeat;fn main() {    let ans = people_aware_of_secret(4, 1, 3);    println!("ans = {}", ans);}
fn people_aware_of_secret(n: i32, delay: i32, forget: i32) -> i32 { let mod0: i64 = 1000000007; // dpKnow[i], 第i天知道秘密的人 let mut dp_know: Vec<i64> = repeat(0 as i64).take((n + 1) as usize).collect(); // dpForget[i], 第i天将要忘记秘密的人 let mut dp_forget: Vec<i64> = repeat(0 as i64).take((n + 1) as usize).collect(); // dpShare[i], 第i天可以分享秘密的人 let mut dp_share: Vec<i64> = repeat(0 as i64).take((n + 1) as usize).collect(); // 第1天的时候,知道秘密的人1个,A // 第1天的时候,将要忘记秘密的人0个 // 第1天的时候,可以分享秘密的人0个 dp_know[1] = 1; if 1 + forget <= n { dp_forget[(1 + forget) as usize] = 1; } if 1 + delay <= n { dp_share[(1 + delay) as usize] = 1; } // 从第2天开始!i for i in 2..=n { // 第i天 // dpKnow[i - 1] - dpForget[i] + dpShare[i] dp_know[i as usize] = (mod0 + dp_know[(i - 1) as usize] - dp_forget[i as usize] + dp_share[i as usize]) % mod0; if i + forget <= n { // dpShare[i] 是第i天,刚知道秘密的人! // 这批人,会在i + forget天,都忘了! dp_forget[(i + forget) as usize] = dp_share[i as usize]; } if i + delay <= n { // dpShare[i + delay - 1] + dpShare[i] - dpForget[i + delay] // i + delay 天 , 100天后,会分享秘密的人 // 第i天,有一些新人,i + delay天分享,一部分, dpShare[i] // 第二部分呢?i + delay - 1天,知道秘密并且会散播的人,- dpForget[i + delay] dp_share[(i + delay) as usize] = (mod0 + dp_share[(i + delay - 1) as usize] - dp_forget[(i + delay) as usize] + dp_share[i as usize]) % mod0; } } return dp_know[n as usize] as i32;}
复制代码


执行结果如下:





左神java代码

发布于: 刚刚阅读数: 3
用户头像

还未添加个人签名 2021.02.15 加入

还未添加个人简介

评论

发布
暂无评论
2022-09-29:在第 1 天,有一个人发现了一个秘密。 给你一个整数 delay ,表示每个人会在发现秘密后的 delay 天之后, 每天 给一个新的人 分享 秘密。 同时给你一个整数 forg_算法_福大大架构师每日一题_InfoQ写作社区