侧边栏壁纸
  • 累计撰写 192 篇文章
  • 累计创建 2 个标签
  • 累计收到 87 条评论

三扔硬币

Allen Best
2022-04-08 / 0 评论 / 0 点赞 / 66 阅读 / 459 字
温馨提示:
本文最后更新于 2022-04-08,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

题目描述
扔 n 次硬币的结果可以用一串 0/1 序列来表示。给定 n,请统计有多少种扔硬币的结果中不含三个连续的 0 且不含三个连续的 1。

当 nn 较大的时候,答案可能很大,所以输出答案模 1,000,000,007 的余数即可。

输入格式
单个整数:表示 n。

输出格式
单个整数:表示答案模 1,000,000,007 的余数。

数据范围
对于 30% 的数据,1≤n≤20;
对于 60% 的数据,1≤n≤5000;
对于 100% 的数据,1≤n≤1,000,000。
样例数据
输入:
3
输出:
6

题解:

dp[i][1]表示第i个数为1的合法方案数。
dp[i][0]表示第i个数为0的合法方案数。
首先考虑转移dp[i][1]:
连续一个1,dp[i-1][0]。
连续两个1,dp[i-2][0]。
则有dp[i][1]=dp[i-1][0]+dp[i-2][0]。
然后考虑转移dp[i][0]:
连续一个0,dp[i-1][1]。
连续两个0,dp[i-2][1]。
则有dp[i][0]=dp[i-1][1]+dp[i-2][1]。

最后答案即为dp[n][0]+dp[n][1]。

0

评论区