当前位置: 首页 > news >正文

算法 POJ1953

一、题目大意

世界杯噪音

背景
“KO-RE-A, KO-RE-A” 在他们的球队进入本国的 FIFA 世界杯半决赛后,54.000 名快乐的球迷大喊。但是,尽管他们的兴奋是真实的,但韩国人民天生仍然非常有组织性。例如,他们组织了巨大的小号(听起来像吹船的号角)来支持他们的球队在球场上比赛。球迷希望在整个比赛中保持噪音水平恒定。
喇叭由压缩气体作。但是,如果您不停地吹响小号 2 秒钟,它就会坏掉。因此,当小号发出声音时,一切都很好,但在小号暂停时,粉丝们必须高呼“KO-RE-A”!
比赛前,一群球迷聚集在一起,决定一个高呼模式。该模式是 0 和 1 的序列,其解释方式如下:如果模式显示 1,则吹响小号。如果显示 0,球迷会高呼“KO-RE-A”。为了确保小号不会中断,该模式中不允许有两个连续的 1。
问题
给定一个正整数 n,确定此长度的不同吟唱模式的数量,即确定不包含相邻 1 的 n 位序列的数量。例如,对于 n = 3,答案是 5(序列 000、001、010、100、101 是可接受的,而 011、110、111 则不可接受)。

输入

第一行包含方案数。
对于每个场景,您都会在一行上得到一个小于 45 的正整数。

输出

每个方案的输出都以包含 “Scenario #i:”的行开头,其中 i 是从 1 开始的方案编号。然后打印一行,其中包含没有相邻 1 的 n 位序列的数量。用空行终止方案的输出。

样本输入

2

3

1

示例输出

Scenario #1:

5

Scenario #2:

2

二、题意理解与分析

这是一道计算特定二进制序列数量的问题,并非运用特定经典算法(如dijkstra算法等)的变形题。问题中已知需要确定长度为正整数n(n < 45)且不包含相邻1的n位二进制序列的数量,这些二进制序列代表球迷的欢呼模式,其中1表示吹响小号,0表示高呼“KO - RE - A” ,由于小号不能连续吹响2秒,所以序列中不允许出现两个连续的1。我们需要根据给定的多个正整数n,计算每个n对应的不包含相邻1的n位序列的数量。解题的关键在于使用动态规划的方法,通过定义两个数组`dp0`和`dp1`分别记录以0和1结尾的不包含相邻1的序列的数量,利用状态转移方程递推计算出不同长度序列的满足条件的数量,最后将以0和1结尾的序列数量相加得到最终结果。

三、算法思路分析

首先初始化两个数组`dp0`和`dp1`,用于分别记录以 0 和 1 结尾的不包含相邻 1 的 n 位序列的数量,数组长度为`n + 1`并初始元素值都为 0。接着处理初始情况,当`n`为 1 时,以 0 结尾和以 1 结尾的序列都各有 1 种,即`dp0[1] = 1`,`dp1[1] = 1`。然后从 2 开始遍历到`n`,对于每个长度`i`,依据状态转移方程更新`dp0`和`dp1`数组的值,以 0 结尾的序列数量`dp0[i]`等于前一个长度以 0 结尾的序列数量`dp0[i - 1]`加上前一个长度以 1 结尾的序列数量`dp1[i - 1]`;以 1 结尾的序列数量`dp1[i]`等于前一个长度以 0 结尾的序列数量`dp0[i - 1]`。最后将`dp0[n]`和`dp1[n]`相加,得到长度为`n`的不包含相邻 1 的 n 位序列的总数。在主函数中,先读取方案数,对每个方案读取对应的`n`值,调用`countSequences`函数计算结果,并按照指定格式输出结果,每个方案输出后用空行分隔。

四.源代码

五.总结

通过编写解决“世界杯噪音”问题的程序,巩固了对动态规划这一算法思想的理解与运用。在代码中利用数组`dp0`和`dp1`分别记录以0和1结尾的不包含相邻1的序列数量,并通过状态转移方程进行递推计算。虽未涉及经典算法如dijkstra算法等,但此次实践锻炼了对实际问题进行抽象建模并运用合适算法解决的能力,让我明白不能局限于固有思维,要根据不同问题的特点灵活选择方法,牢记动态规划的状态定义、状态转移方程等关键要素,从而扩展解题思维的广度。例如本题根据不允许相邻1的规则合理定义状态和转移方程来计算序列数量,为今后解决类似的组合计数问题积累了宝贵经验。

http://www.jsqmd.com/news/542233/

相关文章:

  • 2026年靠谱的企业erp/erp开发专业公司推荐 - 品牌宣传支持者
  • Linux SPI子系统跟踪打印
  • 微信小程序分包反编译全攻略:用wxappUnpacker处理master和sub-xxx.wxapkg
  • 153饮食营养管理信息系统-springboot+vue
  • 依然似故人_孙珍妮Z-Image-Turbo镜像部署:Xinference模型API限流配置
  • OpenClaw安全防护方案:ollama-QwQ-32B本地化部署的风险控制
  • OpenClaw私有化部署Qwen3-VL:30B:飞书助手配置指南
  • AI显微镜-Swin2SR基础教程:理解‘细节重构技术’对AI生成图的价值
  • 开源鸿蒙横竖屏切换
  • Super Qwen Voice World效果惊艳:‘金币数量’HUD实时反映生成计数
  • 如何高效批量下载抖音内容:从单视频到用户主页的完整解决方案
  • Apache IoTDB Web Workbench:告别命令行,拥抱可视化时序数据库管理新时代
  • 达摩院PALM春联模型多场景落地:政务大厅自助春联机解决方案
  • Qwen3-ASR-0.6B惊艳效果:藏语、维吾尔语等少数民族语言识别案例
  • 零基础玩转OpenClaw:Qwen3-32B镜像实现首个自动化任务
  • 快速掌握文本编码:ESFT-token-code-lite入门指南
  • 短效代理是什么?它有什么用?一文讲清定义、特点与应用价值
  • 百度网盘非会员限速如何破解?这个开源工具让你下载速度提升3倍!
  • SDMatte图像预处理建议:曝光校正、去噪、锐化对抠图质量影响量化分析
  • YOLO系列专栏(一):YOLO 2026 数据集增强 | 图像 + 标签同步增强,多方法高效实现
  • 像素时装锻造坊应用场景:Metaverse虚拟形象像素皮肤批量定制服务
  • 79.单词搜索
  • ubuntu22.04环境鸿蒙全仓代码编译配置
  • Gemma-3 Pixel Studio镜像免配置:开箱即用的12B多模态推理工作站
  • Vite项目实战:解决monaco-editor中文汉化失败的3种方法(附最新语言包下载)
  • 从输入网址到访问服务器响应返回客户端
  • 155农村事务管理与交流平台系统-springboot+vue+微信小程序
  • 功能齐全的屏幕截图C++实现详解(附源码)
  • 智能周报生成器:OpenClaw+百川2-13B自动汇总工作成果
  • 156湖南交通工程学院学生就业信息系统-springboot+vue