游戏王的题解

目录

原题:

时间:1s   空间:256M

题目描述

输入格式

输出格式

样例输入

样例输出

题目大意:

主要思路:

dp转移:

dp初始化:

代码:


原题:

时间:1s   空间:256M
题目描述

大哈是个游戏王,尽管他的水平一言难尽,但他却总是这样自我称呼。小羽说如果你能把这个游戏通关了,你才算是个真的游戏王。这个游戏一开始你有n个连在一起的颜色块,第i个颜色块的颜色为a_i。如果从i到j的颜色都一样,就说明i到j属于同一个连通块。比如[5,5,5]属于同一个连通块,[4,3,9,9]有3个连通块。游戏开始前大哈可以选择任意一个位置作为起始点,然后开始游戏。游戏的每一轮大哈可以将包含起始点的连通块的颜色变成任意一种其他的颜色。问大哈能将整个数组变成从1到n的连通块所需要的最少回合数。

大哈是个游戏王,尽管他的水平一言难尽,但他却总是这样自我称呼。小羽说如果你能把这个游戏通关了,你才算是个真的游戏王。这个游戏一开始你有n个连在一起的颜色块,第i个颜色块的颜色为a_i。如果从i到j的颜色都一样,就说明i到j属于同一个连通块。比如[5,5,5]属于同一个连通块,[4,3,9,9]有3个连通块。游戏开始前大哈可以选择任意一个位置作为起始点,然后开始游戏。游戏的每一轮大哈可以将包含起始点的连通块的颜色变成任意一种其他的颜色。问大哈能将整个数组变成从1到n的连通块所需要的最少回合数。

输入格式

第一行一个整数n(1 \le n \le 5000

第二行n个整数a_i1\le a_i \le 5000

输出格式

一个整数代表最少回合数

样例输入

4

5 2 2 1

样例输出

2

题目大意:

给你n个数,要你求把所有数变成相同一个数所需的最小操作数(每次操作可以将包含起点的连通块变为同一个数)

主要思路:

这题很难想到区间dp,我们用dp[l][r] 表示把l~r里的数变为同一个数的最小操作数,首先把每个连通块去重(就像把【2,2,3,3,2,2,4,4,4,4】变成【2,3,2,4】。

dp转移:

  1. v[l] == v[r] 那么就要dp[l][r] = dp[l+1][r-1]+1;注意:a[l+1]!=a[l],a[r-1]!=a[r]图:(画的有点草,谢谢谅解)
    转移一图例
  2. 否则dp[l][r] = min(dp[l+1][r],dp[l][r-1])+1;图:(画的有点草,谢谢谅解)
    转移2图例

剩下就没有什么好说的了

dp初始化:

dp[i][i] = 0把自己变成同一个数需要0步(i<=n)

代码:

#include<bits/stdc++.h>
using namespace std;
vector<int> v; 
int dp[5010][5010];
int main()
{int n;cin>>n;v.push_back(0);int num=-1;for(int i=1;i<=n;i++){int x;cin>>x;if(i == 1){num=x;}else{if(x == num){}else{v.push_back(x);num = x;}}}memset(dp,0x3f,sizeof(dp));for(int i=1;i<=v.size();i++){dp[i][i] = 0;}for(int len=2;len<=v.size();len++){for(int l=1;l+len-1<=v.size();l++){int r=l+len-1;if(v[l] == v[r]&&dp[l-1][r-1]!=v[l]&&dp[l-1][r-1]!=v[r]){dp[l][r] = dp[l+1][r-1]+1;}else{dp[l][r] = min(dp[l+1][r],dp[l][r-1])+1;}}}cout<<dp[1][v.size()];return 0;
}

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

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

相关文章

springboot集成knife4j详细教程

使用原生的swagger作为接口文档&#xff0c;功能不够强大&#xff0c;并且默认的ui比较简陋&#xff0c;不符合大众审美。所以实际开发中推荐使用knife4j对swagger进行增强。knife4j的地址&#xff1a;https://gitee.com/xiaoym/knife4j 基本使用 想要使用knife4j非常简单&…

深入学习Redis:从入门到实战

Redis快速入门 1.初识Redis1.1.认识NoSQL1.1.1.结构化与非结构化1.1.2.关联和非关联1.1.3.查询方式1.1.4.事务1.1.5.总结 1.2.认识Redis1.3.安装Redis1.3.1.依赖库1.3.2.上传安装包并解压1.3.3.启动1.3.4.默认启动1.3.5.指定配置启动1.3.6.开机自启 1.4.Redis桌面客户端1.4.1.R…

【VS Code开发】使用Live Server搭建MENJA小游戏并发布至公网远程访问

文章目录 前言1. 编写MENJA小游戏2. 安装cpolar内网穿透3. 配置MENJA小游戏公网访问地址4. 实现公网访问MENJA小游戏5. 固定MENJA小游戏公网地址 前言 本篇教程&#xff0c;我们将通过VS Code实现远程开发MENJA小游戏&#xff0c;并通过cpolar内网穿透发布到公网&#xff0c;分…

C++ //习题3.8 写出下面各逻辑表达式的值。设a=3,b=4,c=5。

C程序设计 &#xff08;第三版&#xff09; 谭浩强 习题3.8 习题3.8 写出下面各逻辑表达式的值。设a3&#xff0c;b4&#xff0c;c5。 (1) a b > c && b c (2) a || b c && b - c (3) !(a > b) && !c || 1 (4) !(x a) && (y b…

FastAPI之响应状态码

使用FastAPI自定义响应状态码 FastAPI 是一个现代、快速的 web 框架&#xff0c;用于构建API服务&#xff0c;它允许你通过Python 3.6及以上版本进行编程。一个重要的API设计是返回合适的响应状态码&#xff0c;这可以使得客户端理解服务端的处理结果。本教程将向你展示如何在…

Kafka事务是怎么实现的?Kafka事务消息原理详解

目录 一、Kafka事务性消息1.1 介绍Kafka事务性消息1.2 事务性消息的应用场景1.3 Kafka事务性消息的优势 二、Kafka事务性消息的使用2.1 配置Kafka以支持事务性消息生产者配置消费者配置 2.2 生产者&#xff1a;发送事务性消息创建Kafka生产者开始事务发送消息提交或中止事务 2.…

logstash之grok插件自定义规则学习

文章目录 1、前言2、Grok提供的常用Patterns说明及举例2.1 常用的表达式说明 3、使用grok插件进行日志字段处理4、案例1&#xff1a;处理nginx的日志4.1、查看nginx日志格式4.2、对nginx的日志进行过滤处理 5、案例2&#xff1a;处理tomcat的日志5.1、[安装logstash-filter-mul…

外包干了3个月,技术退步明显.......

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入武汉某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

【MySQL】在 Centos7 环境下安装 MySQL

环境搭建 一、检查环境二、检查系统安装包三、安装 mysql yum 源四、安装 mysql 服务五、启动服务六、登录 mysql七、配置 my.cnf 注意&#xff0c;我们搭建的 mysql 环境是在 Linux 的 Centos7 环境下安装的~ 一、检查环境 注意&#xff0c;我们在安装和卸载中&#xff0c;先…

【EI会议征稿】第二届纯数学、应用数学与计算数学国际学术会议(PACM 2024)

第二届纯数学、应用数学与计算数学国际学术会议&#xff08;PACM 2024&#xff09; 2024 2nd International Cnference on Pure, Applied and Computational Mathematics (PACM 2024) 第二届纯数学、应用数学计算数学国际学术会议 (PACM2024) 将于2024年1月19-21日在中国厦门隆…

报错:AttributeError: ‘DataFrame‘ object has no attribute ‘reshape‘

这个错误通常发生在你试图在 Pandas DataFrame 上直接使用 reshape 方法时。reshape 方法通常与 NumPy 数组相关联&#xff0c;而不是 Pandas DataFrame。 如果你正在使用 Pandas DataFrame 并希望重新塑造它&#xff0c;你应该使用 Pandas 的重塑函数&#xff0c;如 pivot、m…

UE5 树叶飘落 学习笔记

一个Plane是由两个三角形构成的&#xff0c;所以World Position Offset&#xff0c;只会从中间这条线折叠 所有材质 这里前几篇博客有说这种逻辑&#xff0c;就是做一个对称的渐变数值 这里用粒子的A值来做树叶折叠的程度&#xff0c;当然你也可以用Dynamic Param 这样就可以让…

麒麟KYLINOS上删除多余有线连接

原文链接&#xff1a;麒麟KYLINOS上删除多余网络有线连接 hello&#xff0c;大家好啊&#xff0c;今天我要给大家介绍的是在麒麟KYLINOS操作系统中&#xff0c;如何删除通过Parallels Desktop虚拟机安装时产生的多余有线连接。在使用Parallels Desktop虚拟机安装麒麟桌面操作系…

C/C++ 题目:给定字符串s1和s2,判断s1是否是s2的子序列

判断子序列一个字符串是否是另一个字符串的子序列 解释&#xff1a;字符串的一个子序列是原始字符串删除一些&#xff08;也可以不删除&#xff09;字符&#xff0c;不改变剩余字符相对位置形成的新字符串。 如&#xff0c;"ace"是"abcde"的一个子序…

服务器数据恢复—raid5少盘状态下新建raid5如何恢复原raid5数据?

服务器数据恢复环境&#xff1a; 一台服务器上搭建了一组由5块硬盘组建的raid5阵列&#xff0c;服务器上层存放单位重要数据&#xff0c;无备份文件。 服务器故障&分析&#xff1a; 服务器上raid5有一块硬盘掉线&#xff0c;外聘运维人员在没有了解服务器具体情况下&#x…

[算法每日一练]-双指针 (保姆级教程篇 1) #A-B数对 #求和 #元音字母 #最短连续子数组 #无重复字符的最长子串 #最小子串覆盖 #方块桶

目录 A-B数对 解法一&#xff1a;双指针 解法二&#xff1a;STL二分查找 解法三&#xff1a;map 求和 元音字母 最短连续子数组 无重复字符的最长子串 最小子串覆盖 方块桶 双指针特点&#xff1a;双指针绝不回头 A-B数对 解法一&#xff1a;双指针 先把数列排列成…

Grounding DINO、TAG2TEXT、RAM、RAM++论文解读

提示&#xff1a;Grounding DINO、TAG2TEXT、RAM、RAM论文解读 文章目录 前言一、Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detection1、摘要2、背景3、部分文献翻译4、贡献5、模型结构解读a.模型整体结构b.特征增强结构c.解码结构 6、实…

使用Sourcetrail解析C项目

阅读源码的工具很多&#xff0c;今天给大家推荐一款别具一格的源码阅读神器。 它就是 Sourcetrail&#xff0c;一个免费开源、跨平台的可视化源码探索项目 使用

Faster R-CNN pytorch源码血细胞检测实战(二)数据增强

Faster R-CNN pytorch源码血细胞检测实战&#xff08;二&#xff09;数据增强 文章目录 Faster R-CNN pytorch源码血细胞检测实战&#xff08;二&#xff09;数据增强1. 资源&参考2. 数据增强2.1 代码运行2.2 文件存放 3 数据集划分4. 训练&测试5. 总结 1. 资源&参…