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代码

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

  1. Dapr中国社区活动之 分布式运行时开发者日 (2022.09.03)

    自2019年10月首次发布以来,Dapr(Distributed Application Runtime,分布式应用运行时)因其"更稳定"."更可靠".&quo ...

  2. http://www.blogjava.net/xzclog/archive/2011/09/29/359789.html

    http://www.blogjava.net/xzclog/archive/2011/09/29/359789.html http://bbs.csdn.net/topics/380187593

  3. 分享一个shell脚本的坑:grep匹配+wc取值 在脚本执行后的结果与手动执行结果不一致

    打算在跳板机上写一个shell脚本,批量检查远程服务器上的main进程是否在健康运行中. 先找出其中一台远程机器,查看main进程运行情况 [root@two002 tmp]# ps -ef|grep ...

  4. selenium获取新页面标签页(只弹出一个新页面的切换)

    selenium获取新页面标签页(只弹出一个新页面的切换) windows = driver.current_window_handle #定位当前页面句柄 all_handles = driver. ...

  5. 分享最近抽空写的一个代码生成器,集成EasyDBUtility数据库访问帮助类

    一直想写一个自己的代码生成器,但是因为工作事情多,一直搁置下来,最近下决心终于利用下班时间写完了,现在分享给有需要的朋友,代码生成器集成EasyDBUtility数据库访问帮助类,暂时只支持sqlse ...

  6. 【原创】大叔经验分享(82)logstash一个实例运行多个配置文件

    logstash一个实例运行多个配置文件,将所有配置文件放到以下目录即可 /usr/share/logstash/pipeline 但是默认行为不是每个配置文件独立运行,而是作为一个整体,每个inpu ...

  7. Mysql下在某一列后即表的某一位置添加新列的sql语句

    Mysql简介 MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司.MySQL被广泛地应用在Internet上的中小型网站中.由于其体积小.速度快.总体拥有成本低,尤 ...

  8. 用一个bat文件调用另外两个bat文件,当1.bat执行完后再执行2.bat

    用一个bat文件调用另外两个bat文件,当1.bat执行完后再执行2.bat 摘自:https://zhidao.baidu.com/question/492732911.html @echo off ...

  9. 字符串分隔 ->连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组; •长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。

        •连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组:•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理. 输入描述: 连续输入字符串(输入2次,每个字符串长度小于100 ...

  10. QQ 微信 新浪 无法 分享 收集

    1.网络请求报错.升级Xcode 7.0发现网络访问失败.输出错误信息 The resource could not be loaded because the App Transport Secur ...

随机推荐

  1. 给jui(dwz)的toolbar添加漂亮的图标

    前面两篇把菜单树和navTab的图标都换了.今天来添加toolbar的图标. 因为JUI(DWZ)自带的toolbar图标就三四个,根本不够用.于是只能是进行自定义添加 这是系统自带的图标,也就4个. ...

  2. vite生成vue3项目

    1.创建项目 npm init vite 2.根据提示输入项目名,也就是文件目录名,再选择框架 3.进入目录 npm install npm run dev 打完收工.

  3. python-if、while、for语句的练习

    简单练习 1. 根据百分制成绩打印及格和不及格,60分一下不及格 source = float(input('请输入您的成绩:')) if 0 <= source < 60: print( ...

  4. Android笔记--Activity--启停活动页面

    Activity启动 从当前页面跳转到新的页面:startActivity(new Intent(原页面.this,目标页面.class)) 而若是从当前页面返回到上一个页面,相当于关闭当前页面,使用 ...

  5. 再次打开Spring界面,多处报错

    分享一下经历 在我再次打开Srpring之后,打算解决一下"历史遗留问题",发现多处标红(挺崩溃的)! 就比如这句话,刚才就是不亮: 毕竟我上次的应用还是很顺利的,所以也就没有第一 ...

  6. ABAC框架-casbin

    参考文档:https://www.kancloud.cn/oldlei/casbin/1289455 参考博客:https://www.cnblogs.com/studyzy/p/11380736.h ...

  7. webgl 系列 —— 渐变三角形

    其他章节请看: webgl 系列 渐变三角形 本文通过一个渐变三角形的示例逐步分析:varying变量.合并缓冲区.图形装配.光栅化.varying 内插 绘制三个点v1 需求:绘制三个相同颜色的点, ...

  8. 算法学习笔记(19): 树上启发式合并(DSU on tree)

    树上启发式合并 DSU on tree,我也不知道DSU是啥意思 这是一种看似特别玄学的优化 可以把树上部分问题由 \(O(n^2)\) 优化到 \(O(n \log n)\). 例如 CodeFor ...

  9. MybatisPlus------代码生成器

    快速开发: 代码生成器: (1)模版:MyBatisPlus提供 (2)数据库相关配置:读取数据库获取信息 (3)开发者自定义配置:手工配置 package com.ithema; import co ...

  10. MapReduce Shuffle源码解读

    MapReduce Shuffle源码解读 相信很多小伙伴都背过shuffle的八股文,但一直不是很理解shuffle的过程,这次我通过源码来解读下shuffle过程,加深对shuffle的理解,但是 ...