随笔 - 73  文章 - 0 评论 - 0 阅读 - 6680
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

生成字符串

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的情况数。

posted on   naiji  阅读(100)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示