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;
}
执行结果如下:

2022-09-29:在第 1 天,有一个人发现了一个秘密。 给你一个整数 delay ,表示每个人会在发现秘密后的 delay 天之后, 每天 给一个新的人 分享 秘密。 同时给你一个整数 forg的更多相关文章
- Dapr中国社区活动之 分布式运行时开发者日 (2022.09.03)
自2019年10月首次发布以来,Dapr(Distributed Application Runtime,分布式应用运行时)因其"更稳定"."更可靠".&quo ...
- 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
- 分享一个shell脚本的坑:grep匹配+wc取值 在脚本执行后的结果与手动执行结果不一致
打算在跳板机上写一个shell脚本,批量检查远程服务器上的main进程是否在健康运行中. 先找出其中一台远程机器,查看main进程运行情况 [root@two002 tmp]# ps -ef|grep ...
- selenium获取新页面标签页(只弹出一个新页面的切换)
selenium获取新页面标签页(只弹出一个新页面的切换) windows = driver.current_window_handle #定位当前页面句柄 all_handles = driver. ...
- 分享最近抽空写的一个代码生成器,集成EasyDBUtility数据库访问帮助类
一直想写一个自己的代码生成器,但是因为工作事情多,一直搁置下来,最近下决心终于利用下班时间写完了,现在分享给有需要的朋友,代码生成器集成EasyDBUtility数据库访问帮助类,暂时只支持sqlse ...
- 【原创】大叔经验分享(82)logstash一个实例运行多个配置文件
logstash一个实例运行多个配置文件,将所有配置文件放到以下目录即可 /usr/share/logstash/pipeline 但是默认行为不是每个配置文件独立运行,而是作为一个整体,每个inpu ...
- Mysql下在某一列后即表的某一位置添加新列的sql语句
Mysql简介 MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司.MySQL被广泛地应用在Internet上的中小型网站中.由于其体积小.速度快.总体拥有成本低,尤 ...
- 用一个bat文件调用另外两个bat文件,当1.bat执行完后再执行2.bat
用一个bat文件调用另外两个bat文件,当1.bat执行完后再执行2.bat 摘自:https://zhidao.baidu.com/question/492732911.html @echo off ...
- 字符串分隔 ->连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组; •长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
•连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组:•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理. 输入描述: 连续输入字符串(输入2次,每个字符串长度小于100 ...
- QQ 微信 新浪 无法 分享 收集
1.网络请求报错.升级Xcode 7.0发现网络访问失败.输出错误信息 The resource could not be loaded because the App Transport Secur ...
随机推荐
- zip文件自动打包
简单的文件打包 首先是问题 我们有一个文件的文件过大,我需要删除或者压缩,当然我们就是选择压缩 如果是单个我们可以直接使用压缩功能 但是多个呢? 首先获取当前目录下的文件,使用 a=`ls` | te ...
- LP两阶段法(一阶段)
\begin{equation}\begin{aligned}\min \quad & z=\mathbf{c}^{T} \mathbf{x} \\\text { s.t. } & \ ...
- luffy前端配置and跨域
1. 安装axios 命令:npm install axios main.js内配置并使用 import axios from 'axios'app.config.globalProperties.$ ...
- U-Boot 常用命令介绍
U-Boot简介 U-Boot常用命令 帮助类 - help/?:该命令输出u-boot支持的所有命令及命令的功能 - help/? cmd:可以查看相应cmd的详细介绍及使用方法 查询类 - bdi ...
- 量子图形加密算法的MATLAB代码实现
一.概述 目前主流的量子图形加密算法有量子像素编码算法(Quantum Image Pixel Encoding,QIPE).量子像素置乱算法(Quantum Image Pixel Scrambli ...
- 我们为什么要阅读webpack源码
相信很多人都有这个疑问,为什么要阅读源码,仅仅只是一个打包工具,会用不就行了,一些配置项在官网,或者谷歌查一查不就好了吗,诚然在大部分的时候是这样的,但这样在深入时也会遇到以下几种问题. webpac ...
- InstructPix2Pix: 动动嘴皮子,超越PS
摘要:InstructPix2Pix提出了一种使用文本编辑图像的方法:给定输入图像和编辑指令,告诉模型要做什么,模型将遵循这些指令来编辑图像. 本文分享自华为云社区<InstructPix2Pi ...
- Redis 性能优化
一.Linux 操作系统 [1]ulimit 与 TCP backlog:1).修改 ulimit:通过 ulimit 修改 open files 参数,redis 建议把 open files 至少 ...
- 学习docker看此文足以
什么是 Docker Docker 最初是 dotCloud 公司创始人 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 ,主要项目代码在 上进行 ...
- classmethod和staticmethod装饰器
""" 两个装饰器 @classmethod 把一个对象绑定的方法,修改成为一个类方法 1.在方法中仍然可以引用类中的静态变量 2.可以不用实例化对象,就直接使用类名在外 ...