在这个科技发达的年代,真人表演已经落伍了。参加完 UOI 后,hehe 蚤去到了下山市大剧院,观看下山市最火爆的机器人表演。

机器人有时比人类更能抓住事情的本质。所谓表演,其实也就是开场有若干个机器人,中间有时一些机器人出现,有时一些机器人消失,最后谢幕还剩若干个机器人的过程。

hehe 蚤得到了一份公开的节目单。这份节目单介绍了按照时间顺序的一些事件。事件共有两种,一种是“某个机器人出现在了舞台上”,另一种是“某个机器人从舞台上消失了”。

但节目单上没有记录开场时会有多少个机器人,也没有记录谢幕时会有多少个机器人。

除此之外,还有 $t$ 个临时安排的机器人会来这次表演。hehe 蚤并不知道他们何时会来,何时会消失(但它们一定会来也一定会消失)。

hehe 蚤决定按照时间顺序记录整个表演。他会用 0 表示一个机器人出现在舞台上,用 1 表示一个机器人从舞台上消失,如此形成一个 01 串。

在表演开始前,hehe 蚤想知道最终 01 串共有多少种可能性。答案对 $998244353$ 取模。

简要题意:

有一个长为 $n$ 的 01 串,你需要计算 $t$ 次操作后能得到多少不同的 01 串。

一次操作的定义为:在串中选两个位置插入一对 01 使得 01 前。

对于所有数据,保证 $1 \leq n, t \leq 300$。

dp 题,先考虑如何判定一个串是否可以操作出来。

贪心的话,考虑能去匹配原串的就去匹配原串,不能匹配的就去凑 01.记一下现在前面有多少个 0 没有匹配。

然后发现如果前面没有 0 不能匹配了,但是又有一个 1 要去匹配,这个时候我们只能撤回那些拿去匹配原串的字符,找一个最大的 \(i\) 使得撤回原串中 \(i\) 后面的所有 01 后,有多的 0 可以拿来匹配这个 1.这个可以暴力去找。

然后考虑把上面反悔贪心的过程记到 dp 里面。定义 \(dp_{i,j,k}\) 为前 \(i\) 个数,和原串匹配了 \(j\) 位,有 \(k\) 个 0 没有匹配 1,然后按着上面的反悔贪心去转移就可以了。

#include<bits/stdc++.h>
using namespace std;
const int N=305,P=998244353;
int f[N],h[N],n,t,dp[N*3][N][N];//dp[i][j][k] 表示现在到了i,匹配到j,前面有k个0
char s[N];
int main()
{
scanf("%d%d%s",&n,&t,s+1);
for(int i=n;i;i--)
{
int c=0;
for(int j=i;j<=n;j++)
{
if(s[j]=='0')
++c;
else
--c;
if(c<0)
break;
if(!f[j]&&c)
f[j]=i,h[j]=c;
}
}
dp[0][0][0]=1;
for(int i=0;i<n+2*t;i++)
{
for(int j=0;j<=n;j++)
{
for(int k=0;k<=t;k++)
{
if(j^n)
{
(dp[i+1][j+1][k]+=dp[i][j][k])%=P;
if(s[j+1]=='0')
{
if(k)
(dp[i+1][j][k-1]+=dp[i][j][k])%=P;
else if(f[j])
(dp[i+1][f[j]-1][h[j]-1]+=dp[i][j][k])%=P;
}
else
(dp[i+1][j][k+1]+=dp[i][j][k])%=P;
}
else
{
(dp[i+1][j][k+1]+=dp[i][j][k])%=P;
if(k)
(dp[i+1][j][k-1]+=dp[i][j][k])%=P;
else if(f[j])
(dp[i+1][f[j]-1][h[j]-1]+=dp[i][j][k])%=P;
}
}
}
}
printf("%d",dp[n+2*t][n][0]);
}

[UOJ#748] [UNR#6 1B] 机器人表演的更多相关文章

  1. UOJ.311.[UNR#2]积劳成疾(DP)

    UOJ 序列中的每个位置是等价的.直接令\(f[i][j]\)表示,\(i\)个数的序列,最大值不超过\(j\)的所有序列每个长为\(k\)的子区间最大值的乘积的和. 由\(j-1\)转移到\(j\) ...

  2. uoj【UNR #3】To Do Tree 【贪心】

    题目链接 uojUNR3B 题解 如果不输出方案,是有一个经典的三分做法的 但是要输出方案也是可以贪心的 设\(d[i]\)为\(i\)节点到最深的儿子的距离 贪心选择\(d[i]\)大的即可 #in ...

  3. UOJ.386.[UNR #3]鸽子固定器(贪心 链表)

    题目链接 \(Description\) 选最多\(m\)个物品,使得它们的\((\sum vi)^{dv}-(s_{max}-s_{min})^{du}\)最大. \(Solution\) 先把物品 ...

  4. 蓝桥杯第七届决赛(国赛)C++B组 第四题 机器人塔

    机器人塔 X星球的机器人表演拉拉队有两种服装,A和B.他们这次表演的是搭机器人塔. 类似: A    B B   A B A  A A B B B B B A BA B A B B A 队内的组塔规则 ...

  5. [蓝桥杯][2015年第六届真题]机器人塔(dfs)

    题目描述 X星球的机器人表演拉拉队有两种服装,A和B. 他们这次表演的是搭机器人塔. 类似:      A     B B    A B A   A A B B  B B B A B A B A B ...

  6. 第七届蓝桥杯C/C++程序设计本科B组决赛 ——机器人塔(程序大题)

    机器人塔 X星球的机器人表演拉拉队有两种服装,A和B.他们这次表演的是搭机器人塔. 类似: A B B A B A A A B B B B B A BA B A B B A 队内的组塔规则是: A 只 ...

  7. java实现第七届蓝桥杯机器人塔

    机器人塔 X星球的机器人表演拉拉队有两种服装,A和B. 他们这次表演的是搭机器人塔. 类似: A B B A B A A A B B B B B A B A B A B B A 队内的组塔规则是: A ...

  8. 蓝桥杯近3年决赛题之二(16年b组)

    做的时候只做对了第一题. 1. 一步之遥 从昏迷中醒来,小明发现自己被关在X星球的废矿车里.矿车停在平直的废弃的轨道上.他的面前是两个按钮,分别写着“F”和“B”. 小明突然记起来,这两个按钮可以控制 ...

  9. 算法笔记_211:第七届蓝桥杯软件类决赛部分真题(Java语言A组)

    目录 1 阶乘位数 2 凑平方数 3 棋子换位 4 机器人塔 前言:以下代码仅供参考,若有错误欢迎指正哦~ 1 阶乘位数 阶乘位数 9的阶乘等于:362880 它的二进制表示为:10110001001 ...

  10. 2016年第七届蓝桥杯国赛试题(JavaA组)

    1.结果填空 (满分19分)2.结果填空 (满分35分)3.代码填空 (满分21分)4.程序设计(满分47分)5.程序设计(满分79分)6.程序设计(满分99分) 1.阶乘位数 9的阶乘等于:3628 ...

随机推荐

  1. 6、Spring之基于xml的自动装配

    6.1.场景模拟 6.1.1.创建UserDao接口及实现类 package org.rain.spring.dao; /** * @author liaojy * @date 2023/8/5 - ...

  2. vlak

    2023-7-14 题目 luogu题目传送门 题目描述 Nina 和 Emilija 正在玩一个特殊的游戏.这个游戏是在一张最开始为空白的纸上进行的.在每一个人的行动回合内,这个人会在这张纸上当前的 ...

  3. Pandas 使用教程 JSON

    目录 JSON 转换为 CSV 简单 JSON 从 URL 中读取 JSON 数据: 字典转化为 DataFrame 数据 内嵌的 JSON 数据 复杂 JSON Pandas 可以很方便的处理 JS ...

  4. ORM查询一个表中有两个字段相同时,只获取某个值最大的一条

    Table表如下: 获取表中name和hex值相同时age最大的那一条 ORM写法,两次查询 ids = table.values('name', 'age').annotate(id=Max('id ...

  5. 用shell命令绘制三角形

    本文旨在通过几个经典的图案来练习shell编程,涉及知识点:for循环,大小比较,基本的数学公式计算,echo小技巧.update:2019-10-17 10:13:54 初次绘制 $ for ((l ...

  6. Python爬虫如何使用代理IP进行抓取

    前言 Python爬虫是一种非常强大的工具,可以用于抓取各种网站的数据.但是,在一些情况下,我们需要使用代理IP来完成数据抓取,如绕过IP限制或保护隐私信息等.本文将介绍如何使用Python爬虫抓取数 ...

  7. 一些H5对接微信JSSDK的问题记录

    这里给大家分享我在实际生活中总结出来的一些知识,希望对大家有所帮助 一.SDK引入 这里提供两套引入流程,一套是vue2.0及其他h5项目,一套是vue3.0的引入流程 不懂的也可以看我之前的一篇详细 ...

  8. 聊一聊 TLS/SSL

    哈喽大家好,我是咸鱼 当我们在上网冲浪的时候,会在浏览器界面顶部看到一个小锁标志,或者网址以 "https://" 开头 这意味着我们正在使用 TLS/SSL 协议进行安全通信.虽 ...

  9. MySQL实战实战系列 06 全局锁和表锁 :给表加个字段怎么有这么多阻碍?

    今天我要跟你聊聊 MySQL 的锁.数据库锁设计的初衷是处理并发问题.作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则.而锁就是用来实现这些访问规则的重要数据结构. 根据 ...

  10. WPF中以MVVM方式,实现RTSP视频播放

    前言视频播放在上位机开发中经常会遇到,基本上是两种常见的解决方案 1.采用厂家提供的sdk和前端控件进行展示,常见的海康/大华都提供了相关sdk及文档 2.开启相机onvif协议,捅过rtsp视频流进 ...