codeforces D - Trees and Segments

思路

  • 因为涉及到 l 0 l_0 l0 最大连续长度和 l 1 l_1 l1 最大连续长度,考虑枚举 l 1 l_1 l1 的长度 d p l 0 dp\;l_0 dpl0 的长度。
  • m a x 0 p r e f [ i ] [ c n t ] max0pref[i][cnt] max0pref[i][cnt] 表示以 i − 1 i-1 i1 结尾的 l 0 l_0 l0
  • m a x 0 s u f [ i ] [ c n t ] max0suf[i][cnt] max0suf[i][cnt] 表示以 i i i 开始的 l 0 l_0 l0
  • m a x 0 b y 1 [ i ] max0by1[i] max0by1[i] 表示 l 1 l_1 l1 i i i 时最大的 l 0 l_0 l0

计算

  • m a x 0 p r e f , m a x 0 s u f max0pref,max0suf max0pref,max0suf 都是 1 → 0 1\rightarrow0 10 ,所以记录 c n t cnt cnt 更改次数
for(int i = 0; i < n; ++i) {int cnt = 0;for(int j = i; j <= n; ++j) {cnt += s[j - 1] == '1';max0pref[j][cnt] = max(max0pref[j][cnt], j - i);max0suf[i][cnt] = max(max0suf[i][cnt], j - i);}
}

更新

  • m a x 0 p r e f i , j = { m a x 0 p r e f i − 1 , j m a x 0 p r e f i , j − 1 max0pref_{i,j}=\begin{cases}max0pref_{i-1,j}\\max0pref_{i,j-1}\end{cases} max0prefi,j={max0prefi1,jmax0prefi,j1
  • m a x 0 s u f i , j = { m a x 0 s u f i + 1 , j m a x 0 s u f i , j − 1 max0suf_{i,j}=\begin{cases}max0suf_{i+1,j}\\max0suf_{i,j-1}\end{cases} max0sufi,j={max0sufi+1,jmax0sufi,j1
for(int i = 0; i <= n; ++i) {for(int cnt = 0; cnt <= n; ++cnt) {if (i) max0pref[i][cnt] = max(max0pref[i][cnt], max0pref[i - 1][cnt]);if (cnt) max0pref[i][cnt] = max(max0pref[i][cnt], max0pref[i][cnt - 1]);}
}
for(int i = n; i >= 0; --i) {for(int cnt = 0; cnt <= n; ++cnt) {if (i + 1 <= n) max0suf[i][cnt] = max(max0suf[i][cnt], max0suf[i + 1][cnt]);if (cnt) max0suf[i][cnt] = max(max0suf[i][cnt], max0suf[i][cnt - 1]);}
}

更新 m a x 0 b y 1 max0by1 max0by1

  • 每次选取一个区间,求当这个区间全为 1 1 1 时的 l 0 l_0 l0
for(int i = 0; i < n; ++i) {int cnt=0;for(int j = i; j <= n; ++j) {if(j > i) cnt += s[j - 1] == '0';if(cnt > k) break;max0by1[j - i] = max(max0by1[j - i], max0pref[i][k - cnt]);max0by1[j - i] = max(max0by1[j - i], max0suf[j][k - cnt]);}
}

答案

  • 按思路枚举 l 1 l_1 l1 长度即可
for(int i = 0; i <= n; ++i) {for(int a = 1; a <= n; ++a) ans[a] = max(ans[a], i + max0by1[i] * a);
}

Thick Twice, Code Once

#include<bits/stdc++.h>
#define il inline
#define get getchar
#define put putchar
#define is isdigit
#define int long long
#define dfor(i,a,b) for(int i=a;i<=b;++i)
#define dforr(i,a,b) for(int i=a;i>=b;--i)
#define dforn(i,a,b) for(int i=a;i<=b;++i,put(10))
#define mem(a,b) memset(a,b,sizeof a)
#define memc(a,b) memcpy(a,b,sizeof a)
#define pr 114514191981
#define gg(a) cout<<a,put(32)
#define INF 0x7fffffff
#define tt(x) cout<<x<<'\n'
#define ls i<<1
#define rs i<<1|1
#define la(r) tr[r].ch[0]
#define ra(r) tr[r].ch[1]
#define lowbit(x) (x&-x)
using namespace std;
typedef unsigned int ull;
typedef pair<int ,int > pii;
int read(void)
{int x=0,f=1;char c=get();while(!is(c)) (f=c==45?-1:1),c=get();while(is(c)) x=(x<<1)+(x<<3)+(c^48),c=get();return x*f;
}
void write(int x)
{if(x<0) x=-x,put(45);if(x>9) write(x/10);put((x%10)^48);
}
#define writeln(a) write(a),put(10)
#define writesp(a) write(a),put(32)
#define writessp(a) put(32),write(a)
const int N=1e6+10,M=3e4+10,SN=5e3+10,mod=998244353;
int n, k;
char s[N];
signed main()
{int T = read();while(T--){n = read(), k = read();scanf("%s", s);vector<int > max0by1(n + 1,-INF);vector< vector<int > > max0pref(n + 1, vector<int >(n + 1));vector< vector<int > > max0suf(n + 1, vector<int >(n + 1));for(int i = 0; i < n; ++i) {int cnt = 0;for(int j = i + 1; j <= n; ++j) {cnt += s[j - 1] == '1';max0pref[j][cnt] = max(max0pref[j][cnt], j - i);max0suf[i][cnt] = max(max0suf[i][cnt], j - i);}}for(int i = 0; i <= n; ++i) {for(int cnt = 0; cnt <= n; ++cnt) {if (i) max0pref[i][cnt] = max(max0pref[i][cnt], max0pref[i - 1][cnt]);if (cnt) max0pref[i][cnt] = max(max0pref[i][cnt], max0pref[i][cnt - 1]);}}for(int i = n; i >= 0; --i) {for(int cnt = 0; cnt <= n; ++cnt) {if (i + 1 <= n) max0suf[i][cnt] = max(max0suf[i][cnt], max0suf[i + 1][cnt]);if (cnt) max0suf[i][cnt] = max(max0suf[i][cnt], max0suf[i][cnt - 1]);}}vector<int > ans(n + 1, -INF);for(int i = 0; i < n; ++i) {int cnt=0;for(int j = i; j <= n; ++j) {if(j > i) cnt += s[j - 1] == '0';if(cnt > k) break;max0by1[j - i] = max(max0by1[j - i], max0pref[i][k - cnt]);max0by1[j - i] = max(max0by1[j - i], max0suf[j][k - cnt]);}}for(int i = 0; i <= n; ++i) {for(int a = 1; a <= n; ++a) ans[a] = max(ans[a], i + max0by1[i] * a);}for(int i = 1; i <= n; ++i) writesp(ans[i]);puts("");}return 0;
}

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

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

相关文章

使用 Webshell 访问 SQL Server 主机并利用 SSRS

RDS SQL Server提供Webshell功能&#xff0c;用户可以通过Web界面登录RDS SQL Server 实例的操作系统。通过Webshell&#xff0c;用户可以在RDS SQL Server实例上执行命令、上传和下载文件以及执行各种操作。Webshell 提供了一种方便高效的远程管理方法&#xff0c;尤其是在 SS…

如何使用nacos进行配置管理以及代码集成

首先需要在maven的pom文件中引入nacos-config依赖 <!--nacos配置管理依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency> 在项目中添加boo…

Python 全栈体系【四阶】(四)

第四章 机器学习 一、人工智能概述 1. 什么是人工智能 人工智能&#xff08;Artificial Intelligence&#xff09;是计算机科学的一个分支学科&#xff0c;主要研究用计算机模拟人的思考方式和行为方式&#xff0c;从而在某些领域代替人进行工作。 2. 人工智能的学科体系 …

输出网络结构图,mmdetection

控制台输入&#xff1a;python tools/train.py /home/yuan3080/桌面/detection_paper_6/mmdetection-master1/mmdetection-master_yanhuo/work_dirs/lad_r50_paa_r101_fpn_coco_1x/lad_r50_a_r101_fpn_coco_1x.py 这个是输出方法里面的&#xff0c;不是原始方法。 如下所示&a…

分层自动化测试的实战思考!

自动化测试的分层模型 自动化测试的分层模型&#xff0c;我们应该已经很熟悉了&#xff0c;按照分层测试理念&#xff0c;自动化测试的投入产出应该是一个金字塔模型。越是向下&#xff0c;投入/产出比就越高&#xff0c;但开展的难易程度/成本和技术要求就越高&#xff0c;但…

附录C 流水线:基础与中级概念

1. 引言 1.1 什么是流水线&#xff1f; 流水线爱是一种将多条指令重叠执行的实现技术&#xff0c;它利用了一条指令所需的多个操作之间的并行性。&#xff08;指令操作的非原子性和指令类型的多样性&#xff09; 在计算流水线中&#xff0c;每个步骤完成指令的一部分&#x…

Leetcode143 重排链表

重排链表 题解1 线性表 给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&#xff1a; L0 → L1 → … → Ln - 1 → Ln请将其重新排列后变为&#xff1a; L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → …不能只是单纯的改变节点内部的值&#xff0c;而是需要实际…

知识笔记(四十七)———什么是mysql

MySQL是一个开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它使用SQL&#xff08;结构化查询语言&#xff09;作为操作和管理数据的语言。MySQL广泛应用于各种应用程序和网站中&#xff0c;是最受欢迎的开源数据库之一。 以下是MySQL的一些主要特点和功…

mumu模拟器,adb devices 忽然就不显示设备解决方法

依次执行以下 adb kill-server adb start-server adb devices

现代物流系统的分析与设计

目 录 引言 3一、系统分析 4 &#xff08;一&#xff09;需求分析 4 &#xff08;二&#xff09;可行性分析 4 二、 总体设计 4 &#xff08;一&#xff09;项目规划 4 &#xff08;二&#xff09;系统功能结构图 5 三、详细设计 6 &#xff08;一&#xff09;系统登录设计 6 …

【技术分享】企业网必不可少的NAT技术

NAT是一种地址转换技术&#xff0c;它可以将IP数据报文头中的IP地址转换为另一个IP地址&#xff0c;并通过转换端口号达到地址重用的目的。NAT作为一种缓解IPv4公网地址枯竭的过渡技术&#xff0c;由于实现简单&#xff0c;得到了广泛应用。 NAT解决了什么问题&#xff1f; 随…

线程按顺序循环执行

假设有3个线程,依次打印A、B、C,按顺序循环打印100次。 这个其实是线程通信,如果只是按顺序执行,用只有一个线程的线程池,依次提交线程任务就行,但是这里还不是每个线程只执行一次,需要循环重复打印。 这里有两种处理方式,一种是搞个全局int变量,对线程数取模,得到0~…

01.Git分布式版本控制工具

一、Git简介 Git是一个开源的分布式版本控制系统&#xff0c;可以有效、高速地进行从很小到非常大的项目的版本管理。 Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。 二、版本控制器方式 1.集中式版本控制工具 版本库放在中央服务器中&…

LinuxBasicsForHackers笔记 -- 日志系统

日志文件存储有关操作系统和应用程序运行时发生的事件的信息&#xff0c;包括任何错误和安全警报。 rsyslog 日志守护进程 Linux 使用名为 syslogd 的守护进程自动记录计算机上的事件。 rsyslog 配置文件 与 Linux 中的几乎所有应用程序一样&#xff0c;rsyslog 由位于 /et…

力扣-242. 有效的字母异位词

文章目录 力扣题目代码分析 力扣题目 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同&#xff0c;则称 s 和 t 互为字母异位词。 示例 1: 输入: s “anagram”, t “nagaram” …

【lesson11】表的约束(4)

文章目录 表的约束的介绍唯一键约束测试建表插入测试建表插入测试建表插入测试修改表插入测试 表的约束的介绍 真正约束字段的是数据类型&#xff0c;但是数据类型约束很单一&#xff0c;需要有一些额外的约束&#xff0c;更好的保证数据的合法性&#xff0c;从业务逻辑角度保…

docker二 redis单机安装

创建文件夹 mkdir -p /usr/local/redis/data /usr/local/redis/logs /usr/local/redis/conf chmod -R 777 /usr/local/redis/data* chmod -R 777 /usr/local/redis/logs*另一种风格 # 创建 redis 配置存放目录 mkdir -p /home/docker/redis/conf && chmod 777 /home/…

关于学习计算机的心得与体会

也是隔了一周没有发文了&#xff0c;最近一直在准备期末考试&#xff0c;后来想了很久&#xff0c;学了这么久的计算机&#xff0c;这当中有些收获和失去想和各位正在和我一样在学习计算机的路上的老铁分享一下&#xff0c;希望可以作为你们碰到困难时的良药。先叠个甲&#xf…

Appium 自动化自学篇 —— 初识Appium自动化!

Appium 简介 随着移动终端的普及&#xff0c;手机应用越来越多&#xff0c;也越来越重要。而作为测试 的我们也要与时俱进&#xff0c;努力学习手机 App 的相关测试&#xff0c;文章将介绍手机自动化测试框架 Appium 。 那究竟什么是 Appium 呢? 接下来我们一起来学习PythonS…

【Python】 pdf2image中所需要的poppler文件

问题 在使用pdf2image是需要依赖poppler这个可执行文件&#xff0c; 网上找不到相应的文件。 使用 from PIL import Image import fitz from pdf2image import convert_from_pathpdf_file rD:\workspace\python学习笔记.pdf save_path rD:\workspace\\long_image.png popple…