题目来源于知识星球—英雄算法联盟,七月算法集训专题
前言
跟随英雄算法联盟博主—英雄哪里出来,每天完成相应的算法练习,一个月后,必定会有所成长!
一、2327.知道秘密的人数(中等)
1.题目描述
2.解题思路
在第一天时必定有一个人知道某个秘密,在delay天之后,他会每天传播秘密,一天告诉一个人秘密,
然后在知道秘密的forget天后,不再传播秘密。他会在 i+delay 到 i+forget-1 之间传播秘密,最后需要在
n-forget+1 到 n 之间统计知道秘密的人数。题目要求将结果对 10^9+7 取余,这里可以直接用结果减
去 10^9+7.
3.代码演示(C++)
class Solution
{
#define maxn 1010
#define mod 1e9+7
int dp[maxn];
public:
int peopleAwareOfSecret(int n, int delay, int forget)
{
dp[1]=1;
for(int i=1;i<=n;i++)
{
for(int j=i+delay;j<i+forget && j<=n;j++)
{
dp[j]+=dp[i];
if(dp[j]>= mod)
{
dp[j]-=mod;
}
}
}
int ans=0;
for(int i=n-forget+1;i<=n;i++)
{
ans+=dp[i];
if(ans>=mod)
{
ans-=mod;
}
}
return ans;
}
};
4.题目链接
总结
每天跟随英雄哥学习相关的算法,一个月会收获很多,如果你想了解更多关于知识星球的内容,欢迎联系我!