生成字符串
SCOI2010] 生成字符串 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
一个生成字符串的任务,任务需要把 n个 1 和 m个 0 组成字符串,在组成的字符串中,在任意的前 k个字符中,1的个数不能少于 0 的个数。满足要求的字符串共有多少个.
一个经典问题:
一只绿鸟50元,一堆人买绿鸟,有人有100元,有人有50元。绿鸟商刚开始没有钱,问有几种排队方法,使得绿鸟商总可以随时找零。
此题中的0就是100元,1就是50元,生成的字符串就是排队方案。
分析:
必须是:n>=m
选择字符1表示:向右上走(x坐标+1,y坐标+1)
选择字符0表示:向右下走(x坐标+1,y坐标-1)
这样子如果不考虑限制条件,
就表示从(0,0)走n+m
步到达(n+m,n-m)
,这相当于从n+m
步中选择m步向下走也就是C(n+m,m)
.
考虑限制条件,任意前缀1的个数>=0的个数,也就是路线不能经过y=-1
这条线。
利用等效替代法:
我们把不合法的情况在经过 y=-1 这条线之前的线以 y=-1 为对称轴向下翻折。
起点就变成了 (0,-2),终点仍然是 (n+m,n-m)。翻转时1的个数+1,0的个数-1,
古方案数C(n+m,m-1)
。
ans=C(n+m,m)-C(n+m,m-1)
.
另一种情况
一个生成字符串的任务,任务需要把 n个 1 和 m个 0 组成字符串,在组成的字符串中,在任意的前 k个字符中,1的个数大于 0 的个数。满足要求的字符串共有多少个.
SP19148 INS14G - Kill them All - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
分析:
第一个字符必须为1,
从第二个字符开始算,在任意前k个字符中,1的个数>=0的个数,
即转化成n-1个1和m个0的情况数。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话