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. Windows软件堆栈溢出(stack overflow)的一些解决方法

    欢迎访问我的个人博客:xie-kang.com 原文地址 Windows平台下,有三种方法调整堆栈大小(适用于MSVC编译器): 1)添加编译参数:/F size  #其中size的单位是byte可设 ...

  2. windows server 2008 创建计划任务不能正常执行

  3. Visual Studio-截断类错误

    Visual Studio-截断类错误 传输数据的目标端,将提示的错误的表对应的截断字段的长度增大,重新创建表 并且,对于Visual 传输节点里面,双击红色报错的节点,然后对于数据源右键,接着选择& ...

  4. SHELL-反弹shell

    什么是shell? 在我们深入了解发送和接收 shell 的复杂性之前,了解 shell 实际上是什么很重要.用最简单的术语来说,shell 就是我们在与命令行环境 (CLI) 交互时使用的工具.换句 ...

  5. Python练习--简单习题(也是一看就能够写出来的代码)

    Python计算列表数字的和 数字范围内的所有偶数(append) 移除列表中的多个元素(remove) 如何实现对列表的去重 如何对简单列表进行排序 Python实现学生的排序11)

  6. Bootstarp5笔记

    我这次来更新Bootstarp5的相关知识啦! 一.安装教程 1.在官网下载相应版本 官网地址:getbootstrap.com 我下载的是Bootstarp5版本 2.点击下载之后,会得到一个压缩文 ...

  7. 【读书笔记】Young Tableau_Calculus of tableaux_bumping and sliding

    目录 bumping Schensted bumping algorithm 举例 sliding/digging a hole 一些定义 Schiitzenberger sliding algori ...

  8. protobuf 详解

    protobuf protobuf概述 protobuf简介 Protobuf是Protocol Buffers的简称,它是Google公司开发的一种数据描述语言,是一种轻便高效的结构化数据存储格式, ...

  9. 基于PaddleOCR的多视角集装箱箱号检测识别

    基于PaddleOCR的多视角集装箱箱号检测识别 一.项目介绍 集装箱号是指装运出口货物集装箱的箱号,填写托运单时必填此项.标准箱号构成基本概念:采用ISO6346(1995)标准 标准集装箱箱号由1 ...

  10. jwt 学习笔记

    概述 JWT,Java Web Token,通过 JSON 形式作为 Web 应用中的令牌,用于在各方之间安全地将信息作为 JSON 对象传输,在数据传输过程中还可以完成数据加密.签名等相关处理 JW ...