动规例题C++代码

2023-05-16

动规题目:字符串S由小写字母构成,长度为n。定义一种操作,每次都可以挑选字符串中任意的两个相邻字母进行交换。询问在至多交换m次之后,字符串中最多有多少个连续的位置上的字母相同?参考博客

#include <iostream>
#include <string.h>
#include <algorithm>
#define N 26
using namespace std;

//返回将i和j中所有该字母移动到一起所需最少步数 
int dp(int i,int j,int a[]){
    if(i == j)    return 0;
    else if(i+1 == j)    return a[j]-a[i]-1;
    //当一个字母出现多次且不连续时,应从两侧往中间移,这样才能保证移动次数最少。找规律得到状态转移方程
    else	return dp(i+1,j-1,a)+a[j]-a[i]-(j-i);
}
 
int main(){
    string str;
    int num;
    cin >> str >> num;
    int length = str.length();
    int a[length][N];
    int b[N]; 		//存放各字母在满足约束的情况下最大的连续数
    int m[length];	//各字母出现的位置
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    memset(m,0,sizeof(m));
    //lengthx26的矩阵,出现字母的地方都置1
    for(int i=0;i<length;i++)
        for(int j=0;j<N;j++)
            a[i][str[i]-'a'] = 1;
    for(int j=0;j<N;j++){
        int k=0;		//该字母出现的总次数
        for(int i=0;i<length;i++)
            if(a[i][j] == 1)
                m[k++] = i;
        if(k == 1)    	b[j] = 1;
        else if(!k)		b[j] = 0;
        else{
            int temp=-1;
            //将字符串中第i到第ii个该字母移动到一起是否可行 
            for(int i=0;i<k;i++)
                for(int ii=i+1;ii<k;ii++)
                    if(dp(i,ii,m)<=num && ii-i+1>temp)
                        temp = (ii-i)+1;
            b[j] = temp;
        }
    }
    sort(b,b+N);
    cout << b[N-1] << endl;
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

动规例题C++代码 的相关文章

随机推荐

  • CentOS7 yum方式安装MySQL5.7

    在CentOS中默认安装有MariaDB xff0c 这个是MySQL的分支 xff0c 但为了需要 xff0c 还是要在系统中安装MySQL xff0c 而且安装完成之后可以直接覆盖掉MariaDB 1 下载并安装MySQL官方的 Yum
  • Win11 Android Stuido虚拟机启动失败、崩溃

    当我开启了虚拟机平台后会导致AndroidStudio虚拟机崩溃 xff0c 关闭此功能即可 当时开启这个功能主要是为了使用Win11 安卓子系统 具体原因不知道是什么导致的 xff0c 如有答案务必分享分享 xff01 xff01 xff
  • Kotlin Native Konan 默认依赖路径修改

    记录一下 C User xxxx konan是kotlin native依赖下载的默认缓存路径 kotlin native 文件夹下的配置文件 找到konan properties文件 发现一段注释使用 KONAN DATA DIR 环境变
  • 官方控件SwipeRefreshLayout内嵌套滑动控件会导致进度条指示器空白并保留

    前言 xff1a 准备实现一个刷新获取数据的功能 刷新的时候遇到了空白圈圈保留 xff0c 于是开始查看SwipeRefreshLayout的源码并想了好几种方式去修复 xff0c 最终采用反射 xff08 第一次使用反射可能用的很糟糕 x
  • NestedScrollView向上滚动一段距离

    注 xff1a 记一次问题 xff08 花了三个小时 xff09 尝试给控件设置焦点 没效果 问题复现 AppBarLayout 43 NestedScrollView 并给NestedScrollView设置以下代码 xff09 lt a
  • day65 JavaWeb框架阶段——全文检索技术Lucene(非结构化数据查询方法,中文分析器IKAnalyzer)

    1 今日内容 什么是全文检索 xff0c 如何实现全文检索Lucene实现全文检索的流程 a 创建索引 b 查询索引配置开发环境入门程序分析器的分析过程 a 测试分析器的分词效果 b 第三方中文分析器索引库维护 a 添加文档 b 删除文档
  • 【已解决】阿里云配置安全组后,仍无法访问端口问题

    文章首发于如下链接 xff1a http 80sdianying xyz id 61 8 最近在搭python的falsk服务器 xff0c 遇到一个问题 xff0c 在服务器运行python程序后 xff0c 外网无法访问到该程序 xff
  • ubuntu 14.04 软件中心闪退解决方案

    ubuntu 14 04 软件中心闪退解决方案 参考文章 xff1a xff08 1 xff09 ubuntu 14 04 软件中心闪退解决方案 xff08 2 xff09 https www cnblogs com lvchaoshun
  • “No X11 DISPLAY variable was set”问题的解决过程

    No X11 DISPLAY variable was set 问题的解决过程 参考文章 xff1a xff08 1 xff09 No X11 DISPLAY variable was set 问题的解决过程 xff08 2 xff09 h
  • postgreSql查询复杂json数组字段

    因为在生产环境中使用到两次 故而记录一下对复杂json字段提取字段值的SQL 先看数据格式 xff1a 假设表名为 ry xff1b 下面的数据格式是我们的字段ryxx 34 bh 34 34 123 34 34 jbxx 34 34 xm
  • VS调用大恒相机sdk实时显示图像并进行图像处理+OPENCV

    前言 xff1a 近期企业需要用大恒相机的sdk开发项目 xff0c 我采用VS2017 43 QT5 10 1 43 MSVC 一 环境配置 VS2017和qt的安装不多介绍 xff0c 主要介绍大恒sdk的配置 1 https www
  • 元学习 每日学习之路

    参考视频 2 21 元学习 xff1a 学会如何去学习 xff0c 就是带着这种对人类这种 学习能力 的期望诞生的 Meta Learning希望使得模型获取一种 学会学习 的能力 xff0c 使其可以在获取已有 知识 的基础上快速学习新的
  • 笔记本电脑连接WIFI速度很慢-解决办法 亲测有效【5MB/S直达10MB/S】

    电脑连接WIFI 经常发生连续断网 xff0c 或者家里的网明明是100M 但是连接电脑WIFI 却连50M都不到 于是在网上查了很多资料 xff0c 网上大多的方法 我讲两个 xff1a 一 用电脑管家 xff0c 360 xff0c 鲁
  • react-native 调用Settings.Secure.getstring获取了android_id / app上架违规获取android_id被拒

    华为上架时 被违规获取android id原因拒绝上架 使用HookLoginDemo检测结果如下 span class token number 2022 span span class token operator span span
  • Linux——网络桥接

    什么是网络桥接 xff1f 在网络的使用中 xff0c 有时需要搭建网络桥来实现网络桥接 例如在一台主机上制作一台虚拟机 xff0c 虚拟机是没有物理网卡的 xff0c 这时虚拟机数据的发送和接收就需要通过主机上的物理网卡 xff0c 需要
  • STM32实战之LED循环点亮

    接着上一章讲 本章我们来讲一讲LED流水灯 xff0c 循环点亮LED 在LED章节有的可能没有讲到 xff0c 本章会对其进行说明 xff0c 尽量每个函数说一下作用 也会在最后说一下STM32的寄存器 xff0c 在编程中寄存器是避免不
  • 远程连接桌面到ubuntu登录闪退

    问题 xff1a 远程连接到Ubuntu的时候登录闪退 xff0c 密码正确 xff0c 且之前在本地登录过没有问题 xff0c ssh登录没有问题 原因 xff1a 就是因为之前在本地登录了没有登出 xff0c 只是锁屏了 xff0c 导
  • CSRF跨站请求伪造漏洞修复

    文章目录 一 漏洞描述二 解决建议二 解决方法Springboot 配置文件增加配置编写配置类编写过滤器 提示 xff1a 以下是本篇文章正文内容 xff0c 下面案例可供参考 一 漏洞描述 跨站请求伪造 xff08 Cross site
  • Linux挂载磁盘(扩容)

    磁盘相关介绍 xff1a fdisk l 查看磁盘占用情况 sda xff1a 代表一个磁盘 s SCSI d 磁盘 a 代表挂在在SCSI类型的硬盘的第一块 Linux文件系统 xff1a 都是用文件 形式描述的 SCSI xff1a 用
  • 动规例题C++代码

    动规题目 xff1a 字符串S由小写字母构成 xff0c 长度为n 定义一种操作 xff0c 每次都可以挑选字符串中任意的两个相邻字母进行交换 询问在至多交换m次之后 xff0c 字符串中最多有多少个连续的位置上的字母相同 xff1f 参考