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

qoj10093 Jump the Frog

题意

给出 \(n\) 个由 O~ 组成的字符串 \(s_i\),还有 \(m\) 个额外字符串,第 \(n+i\) 个字符串 \(s_{n+i}\) 由第 \(s_x\)\(s_y\) \((x,y<n+i)\) 个字符串拼接得到,即 \(s_{n+i}=s_x+s_y\)。你需要对这 \(n+m\) 个字符串解决以下问题:

有一只青蛙从字符串的起点出发,它只能站在 O 上,且每次可以向前跳 \(1\sim k\) 格,问跳到末尾有多少种不同的方案。

\(1\le n,m\le 10^5,1\le k\le 20,\sum|s_i|\le 10^5\)

思路

我们先对前 \(n\)\(s_i\) 进行朴素 dp。设 \(f_{i}\) 为青蛙跳到第 \(i\) 格的方案数,显然有:

\[f_{i}=\begin{cases} 0 & s_i\neq 'O' \\ \sum_{j=\max(0,i-k)}^{i-1} f_{j} & s_i='O' \end{cases} \]

答案即为 \(f_{end}\)

我们解决了前 \(n\) 个字符串的答案,考虑后 \(m\) 个字符串的答案。

假如把两段字符串拼接到一起,可以发现从一个字符串跳到另一个字符串只有可能从前一个字符串的最后 \(k\) 个位置跳到后一个字符串的前 \(k\) 个位置,所以我们对每个字符串不用存储太多的信息。

于是记 \(f_{i,s,t}\) 表示从第 \(i\) 个字符串的第 \(s\) 个字符开始,跳到距离末尾 \(t\) 个字符的位置的方案数。

\(n\) 个处理方法同上,对于后 \(m\) 个,用以上思路转移,则有:

\[f_{i,s,t}=\sum_{t',s'}^{s\le t',s'\le t,t'+s'+1\le k} f_{x,s,t'} f_{y,s',t} \]

http://www.zskr.cn/news/6777.html

相关文章:

  • new 和make
  • 墨刀是否能替代Axure?从产品经理三大画图能力深度分析
  • 唯创知音AI语音交互芯片与模组介绍
  • 用 Go 重写 adbkit:原理、架构与搭建实践
  • C语言环境搭建之Linux子系统使用vscode连接子系统
  • Ubuntu filebrowser网盘工具安装
  • 微信社群机器人接口
  • Revit二次开发 钢筋生成API(一)
  • 如何通过Python SDK 删除 Collection
  • 图片大全 - voasem
  • 面试时让你设计一个“朋友圈点赞”功能测试,如何回答才出彩?
  • 乌班图无法登录桌面,只能终端登录用户。且有网拉不了包(DNS问题)
  • 完整教程:云手机的技术架构可分为哪些
  • AI提示词遇见精密算法:TimeGuessr如何用数学魔法打造文化游戏新体验
  • Arkime:大规模开源网络分析与数据包捕获系统
  • get和post如何理解
  • me and my girlfriend WP复盘
  • 顺序表
  • 开源・数据・能效:MyEMS 如何成为能源管理革新的核心引擎
  • HMCL 3.6.17 Minecraft我的世界启动器
  • go 变量作用域
  • ​​电流互感器选型指南:以普科科技产品为例
  • 读书笔记:白话解读位图索引:什么时候该用,什么时候千万别用?
  • RepositoryItemGridLookUpEdit 使用 ok
  • 谈谈程序猿的职业方向
  • reLeetCode 热题 100-11 盛最多的谁 - MKT
  • C# Avalonia 15- Animation- XamlAnimation
  • 域名购买方案
  • Anby_の模板题集
  • AI 编程的“最后一公里”:当强大的代码生成遇上模糊的需求