牛客题解 | 红和绿

news/2025/3/10 11:12:39/文章来源:https://www.cnblogs.com/wc529065/p/18762209

题目

题目链接

题解

难度:中等

知识点:数学逻辑 暴力求解 动态规划

方法一(暴力求解)

思路:

1.遍历所有涂色方法,找出其中最小的一种输出

2.对于一个长度为len的字符串,用变量i将其分为两部分(i的值为0到len),前一部分将其染色为红色R,只需要依次判断该部分的值(j的值为0到i)若为G就进行染色,将count++;后部分将其染色为绿色G,其需要依次判断该部分值(j的值为i到len)若为R就进行染色,将count++。

#include<iostream>
using namespace std;
int main(){string s;cin&gt;&gt;s;int len=s.length();int min=51;for(int i=0;i<len;i++){ int count="0;" for(int j="i;j<len;j++){" if(s[j]="='R')" count++; } if(count<min) min="count;" cout<<min<<endl; return 0; ``` ##方法二 需要遍历一次数组,时间复杂度o(n),空间复杂度o(1) ###思路: 依次遍历字符串中的每个字符,若该字符为r时,一种情况,将其之前的所有g变为r;第二种情况,将其变为g。 1.用g_count来记录当前位置之前出现的g的个数 2.用count来记录该位置按照两种思路来计算,其中更小的一种情况。 ###原理分析: 若count的值等于g_count时说明将之前的g都变为了r。 若count的值不等于g_count,说明之前情况也是将末尾值改为了g,因此该步骤修改r值为g会使得i位置之前序列成立。 #include<iostream>
using namespace std;
int main(){string s;cin&gt;&gt;s;int len=s.length();int count=0;int g_count=0;for(int i=0;i<len;i++){ if(s[i]="='R'){" g_count++; }else{ count="min(g_count,count+1);" } cout<<count<<endl; return 0; ``` ##方法三(动态规划) ###思路: 1.采用二维数组dp[i][1],dp[i][2],将字符串的第i位染色为红色需要的最小次数记录在dp[i[[1]中,将字符串的第i位染色位绿色需要的最小次数记录在dp[i][2]中。 2.最后输出min(dp[len-1][i],dp[len-1][2])为最终的染色次数。 其中的状态转换公式如下: 当字符串i="0时:" if(s[0]="='R')" { dp[0][1]="1;" dp[0][2]="0;" }else 若字符为r,那么dp[0][1]="0,不需要改色,dp[0][2]=1,表示将该位置由红色改为绿色。" 若字符为g:那么dp[0][1]="1,表示将该位置颜色由绿色改为红色,dp[0][2]=0,表示不需要改色。" 当i不为0时: dp[i][1]="dp[i-1][1]+1;" dp[i][2]="min(dp[i-1][1],dp[i-1][2]);" 若当前位置为r, dp[i][1]:该位置不改变颜色,上一步的结尾颜色只能为红色r,因此修改次数直接为dp[i-1][1];dp[i][2]:该位置修改为绿色g,上一步结尾颜色可以为红色r也可以为绿色g。因此为min(dp[i-1][1],dp[i-1][2])+1; 若当前位置为g, dp[i][1]:该位置修改为红色,上一步的结尾颜色只能为红色r,因此修改次数直接为dp[i-1][1]+1; dp[i][2]:该位置不修改颜色,上一步结尾颜色可以为红色r也可以为绿色g。因此为min(dp[i-1][1],dp[i-1][2]); 例如:rgrgr ![图片说明](https: uploadfiles.nowcoder.com images 20200530 735510_1590852107758_4a47a0db6e60853dedfcfdf08a5ca249 "图片标题") #include<iostream>
using namespace std;
int main(){string s;cin&gt;&gt;s;int len = s.length();int dp[55][3];if(s[0]=='R') {dp[0][1]=0;dp[0][2]=1;}else {dp[0][1]=1;dp[0][2]=0;}for(int i=1;i</len;i++){></len;i++){></iostream>

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

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

相关文章

Camstar中ToggleContainer标题样式改成建模框一样的

😘宝子:除非不再醒来,除非太阳不再升起,不然都请你好好生活,挣扎着前进,开心的笑。(●◡●)

Unpivot Columns与Pivot Columns的连用

一、背景 需要进行数据清洗二、 数据准备 三、操作步骤 3.1 上传数据 +3.2 UnpivotOtherColumns3.3 AddColumn 3.4 RemoveColumns3.5 Pivot

pd将字符串默认为NaN

一、背景 有些字符串会被pandas都城NaN。但是有时不想这么操作。二、数据准备 三、代码展示import pandas as pddf1 = pd.read_excel(NaNTest.xlsx) df2 = pd.read_excel(NaNTest.xlsx, na_values=[], keep_default_na=False)df = pd.concat([df1, df2], axis=1) print(df) 四、…

Power BI批量导入度量值

一、概述 1.1 适用场景 在PB中如果需要大量创建度量值,并对度量值的格式进行各种设置。如果一个个进行操作,则耗时耗力。 解决方法是将度量值的写在csv或者是txt文件中。然后读取文件,完成度量值的编写。1.2 关键节点编写大量度量值(我用Python,循环同一类形成度量值) 正则…

ERP如何高效管理委外加工?全流程拆解!

很多工厂都有委外加工的需求,比如某些零部件自己做成本太高、工艺太复杂,干脆交给外面的供应商去做。 问题来了,委外加工一旦管理不好,就会面临很多坑:订单交付时间不稳定,供应商老是拖 质量难以保证,返工率高 成本难控制,感觉钱花出去了但效果一般 物料进出混乱,不知…

一文全知晓,电脑上的hyper有何作用

随着虚拟现实房产展示的兴起,为购房者提供沉浸式的看房体验成为房产销售的新趋势。虚拟机技术在虚拟现实房产展示中,为房产展示软件提供稳定运行环境,实现房屋内部结构和装修的逼真呈现,让购房者足不出户即可看房。今天给大家介绍电脑上的hyper有何作用?电脑上的hyper有何…

【VMware vSphere】VMware 环境本地部署运行 DeepSeek-R1 大模型(纯 CPU)。

DeepSeek 是由中国杭州深度求索公司开发的智能 AI 助手,一个基于人工智能技术构建的虚拟助手,旨在通过自然语言处理和机器学习算法来理解并回应用户的问题与请求。它可以提供多种服务,包括但不限于信息检索、数据分析、语言翻译、知识问答以及日常生活的辅助建议等。 其实,…

Contest3897 - 计科23级算法设计与分析上机作业-01

题目链接 A.判断一个数能否被3,5,7整除 题面思路 直接模拟即可 示例代码 #include<bits/stdc++.h>using namespace std;#define ll long long //#define int ll #define pii pair<int, int> #define all(x) x.begin(),x.end() #define fer(i, m, n) for(int i = m;…

Ollama+DeepSeek+SlackBot

本文介绍了一种使用Slack聊天工具中的机器人SlackBot的API接口,实现本地化部署Ollama的DeepSeek大模型的远程通讯方案。相比于调用公网的API接口,数据隐私稍微好一点点。最终的方案应该是自建加密聊天工具+Ollama本地化部署,但是这个时间成本有点高,用户可以自行尝试。技术…

GreatSQL 8.0.32-27 GA (2025-3-10)

GreatSQL 8.0.32-27 GA (2025-3-10)版本信息发布时间:2025年3月10日版本号:8.0.32-27, Revision aa66a385910下载链接:https://gitee.com/GreatSQL/GreatSQL/releases/tag/GreatSQL-8.0.32-27用户手册:https://greatsql.cn/docs/8.0.32-27/改进提升 在GreatSQL 8.0.32-27版…

牛客题解 | 求整数的阶乘

牛客题库题解题目 题目链接 题解: 题目难度:中等难度 难点: 1.由于数据太大无法通过整数类型表示,因此用字符串存储结果 2.对于每个字符串从尾部开始进行简单的乘法,在其中考虑进位 知识点:大数相乘 思路: 1.构造multiply(int x, int res[], int res_size)函数,数组res…

OP13常见问题

1.直振与切料口的对中 问题:对中不良,导致送料不到位,对光传感器检测不到产品,报警直振缺料。解决方法: 先检查气缸自带的行程调节器有无松动,如果没有松动,通过微调振动盘机构的位置及底脚高度,实现切料口上下左右的对中。2.机器人夹爪气缸磁开线路 1.M8接头长期晃动,…