BD202404 110串

news/2025/3/16 22:38:16/文章来源:https://www.cnblogs.com/ZouYua/p/18233714

百度之星一场,t4

题目链接:

对于这种连续状态限制的字符串方案数,首先考虑dp

首先定义好每个状态方便转移,0状态是结尾为0,1状态是结尾1个连续1,2状态是结尾两个连续1,有以下关系

if(s[i] == '1') {if(j > 0) dp[i][j][0] = (dp[i][j][0] + dp[i - 1][j - 1][0] + dp[i - 1][j - 1][1]) % mod;dp[i][j][1] = (dp[i][j][1] + dp[i - 1][j][0]) % mod;dp[i][j][2] = (dp[i][j][2] + dp[i - 1][j][1] + dp[i - 1][j][2]) % mod;
} else {dp[i][j][0] = (dp[i][j][0] + dp[i - 1][j][0] + dp[i - 1][j][1]) % mod;if(j > 0) dp[i][j][1] = (dp[i][j][1] + dp[i - 1][j - 1][0]) % mod;if(j > 0) dp[i][j][2] = (dp[i][j][2] + dp[i - 1][j - 1][1] + dp[i - 1][j - 1][2]) % mod;
}

可以发现每个分类讨论的转移个数不加本身是有5条(转移图可知有6条,有一条不合法),这是基于转移的路径确定,主要s[i]区别就是转移的代价变化

  • 本题卡了内存,故要优化成滚动数组方式转移
#include<bits/stdc++.h>
#define int long long
using namespace std;
using ull = unsigned long long;
using ll = long long;
using PII = pair<int,int>;
#define IOS ios::sync_with_stdio(false),cin.tie(0)
#define lowbit(x) (x) & (-x)
#define endl "\n" 
#define pb push_back
const int N=5e3+10;
const int INF=0x3f3f3f3f;
const int mod=998244353;
ll dp[2][N][3];
void solve()
{int n, k; cin >> n >> k;string s; cin >> s; s = " "  + s;dp[0][0][0] = 1;for(int i = 1; i <= n; i ++) {int u = i & 1;for(int j = 0; j <= k; j ++) {if(s[i] == '1') {if(j > 0) dp[u][j][0] = (dp[u][j][0] + dp[u ^ 1][j - 1][0] + dp[u ^ 1][j - 1][1]) % mod;dp[u][j][1] = (dp[u][j][1] + dp[u ^ 1][j][0]) % mod;dp[u][j][2] = (dp[u][j][2] + dp[u ^ 1][j][1] + dp[u ^ 1][j][2]) % mod;} else {dp[u][j][0] = (dp[u][j][0] + dp[u ^ 1][j][0] + dp[u ^ 1][j][1]) % mod;if(j > 0) dp[u][j][1] = (dp[u][j][1] + dp[u ^ 1][j - 1][0]) % mod;if(j > 0) dp[u][j][2] = (dp[u][j][2] + dp[u ^ 1][j - 1][1] + dp[u ^ 1][j - 1][2]) % mod;}}memset(dp[u ^ 1], 0, sizeof dp[u ^ 1]);}ll res = 0;int u = n & 1;for(int j = 0; j <= k; j ++) {res = (res + dp[u][j][0] + dp[u][j][1] + dp[u][j][2]) % mod;}cout << res << endl;
}
signed main()
{int T = 1;//cin>>T;while(T--){solve();}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/720510.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue 3 Teleport:掌控渲染的艺术

title: Vue 3 Teleport:掌控渲染的艺术 date: 2024/6/5 updated: 2024/6/5 description: 这篇文章介绍了Vue3框架中的一个创新特性——Teleport,它允许开发者将组件内容投送到文档对象模型(DOM)中的任意位置,即使这个位置在组件的挂载点之外。Teleport旨在解决某些特定场景…

如何解决无法解析 JSP 中的方法 getParameter()

在构建JSP项目中,出现无法解析 JSP 中的方法 getParameter()的错误 1、右键单击您的项目并选择Open Module Settings,确保您在Modules部分的Dependencies选项卡上,单击底部的“+”按钮,然后选择1 JAR 或目录...:2、将apache-tomcat-8.5.31servlet-api.jar部署到容器中,点…

基于c语言的TCP客户端、服务端基础代码

基于c语言的TCP客户端、服务端基础代码 基本流程:客户端:#include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <stdio.h> #include <errno.h> #include <sys/socket.h> #include <netinet/in.h> #i…

解决错误运行‘Tomcat 9.0.35‘: 地址 localhost:1099 已在使用

“Error running ‘Tomcat 9.0’: Address localhost:1099 is already in use”报错问题问题描述:idea运行项目时,左下方出现红色小方块提示问题“Error running ‘Tomcat 9.0’: Address localhost:1099 is already in use”。 这是因为端口被占用了。 解决问题: 按win+R打…

嵌入式 Linux LED 驱动开发实验学习

I.MX6U-ALPHA 开发板上的 LED 连接到 I.MX6ULL 的 GPIO1_IO03 这个引脚上,进行这个驱动开发实验之前,需要了解下地址映射。 地址映射 MMU 全称叫做 MemoryManage Unit,也就是内存管理单元。在老版本的 Linux 中要求处理器必须有 MMU,但是现在 Linux 内核已经支持无 MMU 的处…

囚徒5.4_基于texlive的PlotNeuralNet画深度学习框架图

首先下载并安装texlive 连接如下texlive安装教程 接着下载PlotNeuralNet项目 下载链接PlotNeuralNet对PlotNeuralNet的一些解释它其实是基于texlive语言,然后通过python语言按照texlive的语法格式进行拼接生成tex文档之后使用pdflatex命令生成pdf. PlotNeuralNet中有一系列的写…

第二次大作业BLOG心得

(1)前言: 知识点: ①ArrayLsit的知识点: ArrayList 是 Java 中的动态数组实现,它提供了自动调整大小的功能,可以根据需要动态增长或收缩。 ArrayList 可以存储任意类型的对象,并支持随机访问,即可以通过索引快速访问列表中的元素。 ArrayList 内部通过数组实现,当元素…

python 函数 形参前带*或者两个星** 收集元组或者字典,实参前带星*或者两个星** 解开序列或者字典

函数的形参前面带一个星*,代表着不定长参数,实际上是收集了不定长的实参,作为一个元组。 形参前面带两个星**,代表可以接收不定长参数,并且调用该函数时实参要指定参数名,实际上是收集了一个不定键个数的字典。 实参前带一个星*,表示解开当前的序列,再做为参数传递。 实…

Address localhost:1099 is already in use

端口号被占用 netstat -ano查出占用这个端口号的进程 在任务管理器里终止

作业总结

这学期才接触java,面向对象以前只在C里面用过一点,所以一开始对于怎么写,以及java语法有点不太适应。 个人体会: ​ 关于类: 1、类似C中的struct,构造函数、内置方法(函数 )都比较相似 2、但是无法重载运算符,这是比较难受的一点。 3、尽量避免代码的重复,把private和p…

TCP概述

概述 TPC:传输控制协议,TCP协议是面向连接的、可以实现端对端通信的可靠的协议。 TCP协议传输数据时会为每个字节分配一个序列号,通过这个序列号就可以判断数据是否重复到达以及数据是否丢失,还可以通过序列号对数据进行排序。 报首格式TCP建立连接的三次握手过程TCP三次挥手…

基于毫米波雷达的手势识别算法

摘要 基于毫米波的手势识别技术提供了良好的人机交互体验。先前的工作专注于近距离手势识别,但在范围扩展方面不够,即他们无法识别距离相当大的噪声运动超过一米的手势。在本文中,我们利用一种新的数据处理方法和定制的人工卷积神经网络(CNN)设计了一个远程手势识别模型。…