题解 | #1006.Touhou Red Red Blue# 2023杭电暑期多校5

news2024/9/28 19:28:36

1006.Touhou Red Red Blue

贪心/DP

题目大意

你将依次收到 n n n 个物品,他们具有颜色红、绿或蓝,记为 R , G , B R,G,B R,G,B

你有一个大小为 2 2 2 的物品栏。每当你收到一个物品,你可以考虑将其放入物品栏或直接丢弃
物品栏是一个栈,这意味着如果你决定放入物品但物品栏是满的,你将丢弃更早放入的那个物品,并将手上的物品放入

下面是物品的得分和消除规则:

  1. 如果手上和物品栏中共 3 3 3 个物品颜色相同,则消除这 3 3 3 个物品,得到 1 1 1 分(这是唯一的得分方式),并在物品栏得到 1 1 1 个颜色由你决定的新物品
  2. 如果手上和物品栏中共 3 3 3 个物品颜色各不相同,则消除这 3 3 3 个物品,并在物品栏得到 2 2 2 个颜色由你决定的新物品

求对于给定的物品序列,可以得到的最高分是多少

解题思路

官方给出的做法是DP,但是考虑所有的状态转移略显繁琐,难以不重复、不遗漏
相比起来我还是更喜欢直接贪心的方法//

思路来源:实验室某优秀学长

考虑一种游戏策略前,先掌握游戏核心机制
首先,在贪心的思想下,物品栏的栈特性可以不考虑//因为如果需要被迫丢弃物品,大可以在拿到这个物品时就直接丢弃//
其次,注意到颜色任选的物品可以不立刻考虑,作为任意物品即可
考虑消除过程中的特点:

  1. 规则 2 2 2 消除后得到 2 2 2任意物品,可以配合规则 1 1 1 ,直接和下一个物品(若有)合成得分
  2. 规则 1 1 1 消除后留下 1 1 1任意物品。这意味着如果有得分,最后一定会留下 1 1 1任意物品

借助上面两个特点,单独考虑第一次消除,后续消除借助前面得到的任意物品,具体可以参考代码注释
计数直到满足条件消除,即视为取需要的物品,并直接丢弃无帮助的物品,重新计数即可

时间复杂度

O ( n ) O(n) O(n)

参考代码

参考代码为已AC代码主干,其中部分功能需读者自行实现 在这里插入图片描述

int RGB(char c){
    switch (c)
    {
        case 'R':return 1;
        case 'G':return 2;
        default:return 3;
    }return 0;
}
void solve()
{
    string s;cin >> s;
    ll n=s.length(),res=0;
    int cur=0,cnt[4]={0};
    FORLL(i,0,n-1){
        cur=RGB(s[i]);cnt[cur]++;
        if(res){//消除过,前面必定有一个自选
            if(cnt[1]&&cnt[2]||cnt[1]&&cnt[3]||cnt[2]&&cnt[3]){
                //已有两种不同颜色+自选:选不同颜色,消3得2
                if(i+1==n) break;//没有下一个就结束
                i++;res++;//再用2个自选和下一个出现的颜色消除
                cnt[1]=cnt[2]=cnt[3]=0;
            }else if(cnt[1]==2||cnt[2]==2||cnt[3]==2){
                //已有两个相同颜色+自选:选相同颜色,消3得1
                res++;cnt[1]=cnt[2]=cnt[3]=0;
            }
        }else{//还没有消除过
            if(cnt[1]&&cnt[2]&&cnt[3]){//兼有三色:消3得2
                if(i+1==n) break;
                i++;res++;//再用2个自选和下一个出现的颜色消除
                cnt[1]=cnt[2]=cnt[3]=0;
            }else if(cnt[1]==3||cnt[2]==3||cnt[3]==3){//有三个同色:消3得1
                res++;cnt[1]=cnt[2]=cnt[3]=0;
            }
        }
    }cout << res << endl;
}

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

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

相关文章

JavaScript |(四)正则表达式 | 尚硅谷JavaScript基础实战

学习来源&#xff1a;尚硅谷JavaScript基础&实战丨JS入门到精通全套完整版 文章目录 &#x1f4da;正则表达式&#x1f4da;正则表达式字面量方式&#x1f4da;字符串&正则表达式&#x1f407;split()&#x1f407;search()&#x1f407;match()&#x1f407;replace()…

机器学习基础知识(1)

什么是机器学习 机器学习是一种通过输入大量数据来构建一种模型&#xff08;网络&#xff09;&#xff0c;这个训练好的模型将会被用来预测或执行某些操作&#xff0c;这个训练的过程和方法就是机器学习。 我们也可以理解为构建一个“函数”&#xff0c;使得这个函数面对我们…

python+django+mysql项目实践三(用户管理)

python项目实践 环境说明: Pycharm 开发环境 Django 前端 MySQL 数据库 Navicat 数据库管理 用户列表展示 urls view models html <!DOCTYPE html> <html

c++ 速度之巅-位图算法,上亿数据的快速操作

问题&#xff1a; 有很多不重复的整数&#xff0c;其中最大值不超过40亿&#xff0c;最小值是0&#xff0c;要求判断某个指定的整数&#xff0c;是否在这个集合中。 最快的算法&#xff1a; 使用位图算法 使用2个字节(一个字节八位)&#xff0c;表示16个数&#xff08;0-15&am…

梯形速度曲线轨迹规划(速度前馈+PID、SCL+ ST代码)

S形速度曲线轨迹规划算法和应用详细介绍,请查看下面文章博客,这里不再赘述: S速度曲线轨迹规划(普通变频位置闭环控制算法详细介绍+SCL代码)_RXXW_Dor的博客-CSDN博客位置控制用PD控制器,详细内容介绍请查看下面博客文章:PD控制器算法详细解读_RXXW_Dor的博客-CSDN博客鉴…

【CSS】倾斜按钮

效果 index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"/><meta http-equiv"X-UA-Compatible" content"IEedge"/><meta name"viewport" content"widthdevice-…

[JAVAee]锁策略

目录 乐观锁与悲观锁 乐观锁 乐观锁的冲突检测 悲观锁 读锁与写锁 重量级锁与轻量级锁 重量级锁 轻量级锁 自旋锁 公平锁与非公平锁 可重入锁与不可重入锁 乐观锁与悲观锁 乐观锁 在乐观锁中,假设数据并不会发生冲突,在正式提交数据时会对数据进行冲突检测,如果发…

【2023 华数杯全国大学生数学建模竞赛】 A题 隔热材料的结构优化控制研究 问题分析、模型建立及参考文献

【2023 华数杯全国大学生数学建模竞赛】 A题 隔热材料的结构优化控制研究 问题分析、模型建立和参考文献 1 题目 A 题 隔热材料的结构优化控制研究 新型隔热材料 A 具有优良的隔热特性&#xff0c;在航天、军工、石化、建筑、交通等高科技领域中有着广泛的应用。 目前&#…

【逗老师的PMP学习笔记】4、项目整合管理

目录 一、制定项目章程1、制定项目章程的整体输入、输出和工具技术2、输入2.1、输入-商业文件2.2、输入-协议2.3、输入-事业环境因素组织过程资产 3、工具与技术3.1、专家判断3.2、数据收集3.3、人际关系与团队技能3.4、会议 4、输出4.1、输出-项目章程4.2、输出-假设日志 二、…

router-view路由出口

这边文章主要讲router-view搭建后台管理系统的一个基本模板 一.创建自己的路由规则 1.新建文件夹src/router/index.js npm i vue-router3.6.5 2.配置好文件 import Vue from "vue"; import VueRouter from "vue-router"; Vue.use(VueRouter);// 1.创建…

软件测试/测试开发:常见面试题与流程篇

本系列文章总结归纳了一些软件测试工程师常见的面试题&#xff0c;主要来源于个人面试遇到的、网络搜集&#xff08;完善&#xff09;、工作日常讨论等&#xff0c;分为以下十个部分&#xff0c;供大家参考。如有错误的地方&#xff0c;欢迎指正。有更多的面试题或面试中遇到的…

2.4G无线收发芯片XL2409开发板,上手简单,集成 M0+核MCU

XL2409开发板是一款基于 2.4G SoC芯片 XL2409的开发工具&#xff0c;为开发者提供了一个快速了解、测试XL2409芯片性能的工具。XL2409开发板可以通过连接JI_LINK&#xff0c;ST_LINK&#xff0c;DAP_LINK进行开发和调试&#xff0c;使用 Keil 开发环境。上手简单&#xff0c;烧…

【LeetCode】094. 分割回文串II

文章目录 1. 解题思路1.1 创建dp表1.2 状态转移方程1.3 提前求出所有子串是否是回文串 2. 整体代码 1. 解题思路 1.1 创建dp表 这道题我们使用动态规划的方法来解&#xff0c;首先创建一个大小为字符串长度的dp表。dp[i] 表示 s[0, i] 的字符串最小划分多少次可以全划分为回文…

Linux QQ v3.1.2 2023.5.30 版本安装和体验

新电脑首次登陆需要手机扫码。 功能的确比2.x&#xff0c;1.x的时候强了很多。 官方地址&#xff1a; https://im.qq.com/linuxqq/index.shtml 如果连QQ都非常好的支持Linux了&#xff0c;那么说明使用Linux的人群真得非常多了。 ubuntu linuxqq_3.1.2-13107_amd64.deb 12…

随机RSI震荡指标公式(StochRSI),RSI和KDJ二合一

随机RSI震荡指标(StochRSI)是由图莎尔钱德和斯坦利克罗发明的一种摆动指标&#xff0c;结合了相对强弱指标&#xff08;RSI&#xff09;和随机指标&#xff08;KDJ&#xff09;的原理&#xff0c;目的是提高灵敏度&#xff0c;解决RSI难以达到超买超卖区的问题&#xff0c;以便…

Hopfield神经网络求解旅行商(TSP)问题matlab代码

1案例背景 1.1连续Hopfield神经网络概述 1.网络结构 连续Hopfield神经网络(Continuous Hopfield Neural Network,CHNN)的拓扑结构和离散Hopfield神经网络的结构类似,如图11-1所示。连续Hopfield网络和离散Hopfield 网络的不同点在于其传递函数不是阶跃函数,而是连续函…

C++ 用vector创建数组对象

C标准库提供了被封装的动态数组——vector&#xff0c;而且这种被封装的数组可以具有各种类型&#xff0c;这就使我们免去了一些重复性工作。 vector不是一类&#xff0c;而是一个类模板。 1. vector定义动态数组的形式为 vector<元素类型>数组对象名(数组长度);尖括号…

Windows下QT Creator安装MinGW 32bit编译器

前言 注&#xff1a;本作者是基于FFmpeg开发需要&#xff0c;故在Windows下QT Creator中安装MinGW 32bit编译器&#xff01;其它型号编译器参照此文章基本可以实现&#xff01; 一、下载需要的编译器 1、下载链接 链接&#xff1a; 链接&#xff1a;https://pan.baidu.com/…

sql 关联了2张表的 update 语句(转)

转自&#xff1a;SQL Update&#xff1a;使用一个表的数据更新另一张表 、update 关联两个表 基本上 select 能支持的关联和子查询操作&#xff0c;都能在 update 语句中使用。 在 where 条件中使用子查询 update a set a.age 1 where id in (select device_id from b) 在 wher…

Django调研

1. Django 简介 基本介绍 Django 是一个由 Python 编写的一个开放源代码的 Web 应用框架。 使用 Django&#xff0c;只要很少的代码&#xff0c;Python 的程序开发人员就可以轻松地完成一个正式网站所需要的大部分内容&#xff0c;并进一步开发出全功能的 Web 服务 Django 本…