当前位置:网站首页>20220703 周赛:知道秘密的人数-动规(题解)
20220703 周赛:知道秘密的人数-动规(题解)
2022-07-05 23:28:00 【阿旋要毕业~】
题目链接:力扣https://leetcode.cn/problems/number-of-people-aware-of-a-secret/
思路:
一开始的思路是生兔子。当前知道秘密的人数=前一天知道秘密的人数+(i-delay)的人数-(i-forget)的人数。后来推导的过程中发现,(i-delay)的人,第i天不一定还在,说不定已经遗忘了。(i-forget)的人数也是不准的,说不定在(i-forget ——i)之间已经遗忘了。
问题的关键是:得到的式子应该是:当天人数 = 前一天人数-(第i天忘记的人数)+ 新得到消息的人数。那么第i天忘记的人数和新得到消息的人数应该怎么求呢。其实只要添加一个数组get数组表示新得到消息的人数就可以。
我们以示例来看一下。
第1天新得到消息的人数为1,即get[1] = 1。
第2天新得到消息的人数为0(因为需要两天后,才具备宣传消息的能力),即get[2] = 0。
第3天新得到消息的人数为get[3] = get[3-2] = get[1] = 1。
第4天新得到消息的人数为get[4] = get[4-2]+get[4-3] = get[2] +get[1] = 1.(因为第一天新得到宣传消息的人还没有忘记,所以仍可以宣传消息。这里就要注意了。之前的人忘记消息以后就不能传播了。)
所以:当前新具备得到消息的人数为:
for(int k = i-forgrt+1; k <= i-delay; k++) {
get[i] += get[k]
}
所以:第5天新得到消息的人数为 :get[5] = get[5-2] + get[5-3] = get[3]+get[2] = 1.(因为第一天新得到消息的人,到第五天已经不具备传播消息的能力了,而第4天新得到消息的人,要到第六天才能具备传播消息的能力。)
再来看我们之前的公式:当天人数 = 前一天人数-(第i天忘记的人数)+ 新得到消息的人数。新的到消息的人数我们已经知道了,那么第i天忘记的人数怎么求呢,其实第i天忘记的人数就是get[i-forget]。于是此题得解。
代码:
class Solution {
public int peopleAwareOfSecret(int n, int delay, int forget) {
long init = 0;
long[] get = new long[n+1];
long all = 0;
init = 0;
get[1] = 1;
all = 1;
for(int i = 2; i<=n; i++) {
if(i-forget >= 1) {
all = all+1000000007;
init = (all - get[i-forget])%1000000007;
// System.out.println("init"+i+":"+init[i]);
} else {
init = all;
// System.out.println("init"+i+":"+init[i]);
}
for(int k = i-forget+1;k<=(i-delay);k++) {
if(k >= 1) {
get[i] +=get[k];
get[i] %= 1000000007;
// System.out.println("get"+i+":"+get[i]);
}
}
all = (init + get[i]) % 1000000007;
// System.out.println(i+":"+all[i]);
}
return (int)(all % 1000000007);
}
}
边栏推荐
- Code farmers to improve productivity
- 11gR2 Database Services for &quot; Policy&quot; and &quot; Administrator&quot; Managed databases (file I
- Brushless drive design -- on MOS drive circuit
- 20.移植Freetype字体库
- The interface of grafana tool displays an error, incluxdb error
- 20. Migrate freetype font library
- UVA – 11637 Garbage Remembering Exam (组合+可能性)
- Huawei simulator ENSP - hcip - MPLS experiment
- 【LeetCode】5. Valid Palindrome·有效回文
- UVA11294-Wedding(2-SAT)
猜你喜欢
Redis高可用——主从复制、哨兵模式、集群
Dynamic planning: robbing families and houses
芯源&立创EDA训练营——无刷电机驱动
同事悄悄告诉我,飞书通知还能这样玩
Rasa 3.x 学习系列-Rasa 3.2.1 新版本发布
Fiddler Everywhere 3.2.1 Crack
Live tiktok shop 2022 latest gameplay card slot overseas live e-commerce new traffic
Spécifications techniques et lignes directrices pour la sélection des tubes TVS et ESD - Recommandation de jialichuang
4 points tell you the advantages of the combination of real-time chat and chat robots
开关电源Buck电路CCM及DCM工作模式
随机推荐
Go language implementation principle -- lock implementation principle
Go language implementation principle -- map implementation principle
AsyncSocket长连接棒包装问题解决
GFS distributed file system
哪些偏门项目可以做到?自媒体做到月赚一万以上很难吗?
GFS分布式文件系统
11gR2 Database Services for &quot;Policy&quot; and &quot;Administrator&quot; Managed Databases (文件 I
Hcip course notes-16 VLAN, three-tier architecture, MPLS virtual private line configuration
SpreadJS 15.1 CN 与 SpreadJS 15.1 EN
Objective C message dispatch mechanism
Spire.PDF for NET 8.7.2
Summary of binary tree recursive routines
3: Chapter 1: understanding JVM specification 2: JVM specification, introduction;
Creative mode 1 - single case mode
Rasa 3. X learning series -rasa x Community Edition (Free Edition) changes
【经典控制理论】自控实验总结
Code farmers to improve productivity
Spire Office 7.5.4 for NET
From the perspective of quantitative genetics, why do you get the bride price when you get married
The PostgreSQL column reference 'ID' is ambiguous - PostgreSQL column reference'id'is ambiguous