牛客周赛71(字符串,状压dp)

news/2024/12/16 16:02:54/

目录

B. 宝石手串

         D. 气球谜题


 

 

 

 

 

B. 宝石手串

        (1)两种扩容方式:
               

// 法一:直接加(通常用于拼接字符串)s += s// 法二:一个一个字符加(用于加单个字符)for (int i = len; i < 2 * len; i ++)s.push_back(s[i - len]);// 错误方法,s是一个容器,有大小,此方法会越界for (int i = len; i < 2 * len; i ++)s[i] = s[i - len];

        (2)每个字符记录上次出现位置,下次出现更新该字符最短间距 

        (3)dis数组值为 len - 1 时说明该字符只出现了一次,第二个是复制而来,该情况也要排除

#include<bits/stdc++.h>
#define LL long long
using namespace std;const int N = 2e5 + 5, INF = 0x3f3f3f3f;
int t, n, ans, h[30], vis[30], dis[30];
string s;int main()
{cin >> t;while (t --){cin >> n >> s;ans = INF;int len = s.length();s += s;memset(dis, 0x3f, sizeof(dis));memset(vis, 0, sizeof(vis));for (int i = 0; i < 2 * len; i ++){int x = s[i] - 'a';if (!vis[x]){h[x] = i;vis[x] = 1;}else{dis[x] = min(dis[x], i - h[x] - 1);h[x] = i;}}for (int i = 0; i < 30; i ++)if(dis[i] != len - 1)   	ans = min(ans, dis[i]);if (ans == INF)cout << "-1" << '\n';elsecout << ans << '\n';}return 0;
}

 

D. 气球谜题

        (1)memset无法赋 1e18,只能 for 循环赋值

        (2)dp[ i ][ j ] [ k ]:第 i 个气球颜色为 j ,出现过的颜色集合为 k

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 2e5 + 5, INF = 1e18;
int n, ans, a[N], dp[N][5][10];
string s;signed main()
{cin >> n >> s;s = '0' + s;for(int i = 1; i <= n; i ++){for(int j = 0; j <= 2; j ++){for(int k = 1; k < 8; k ++){dp[i][j][k] = INF;}}}for (int i = 1; i <= n; i ++)cin >> a[i];for (int j = 0; j <= 2; j ++){if (s[1] - '0' == j)dp[1][j][1 << j] = 0;elsedp[1][j][1 << j] = a[1];}for (int i = 2; i <= n; i ++)			// 当前在第 i 个气球 for (int j = 0; j <= 2; j ++)		// 当前第 i 个气球的颜色 for (int k = 1; k < 8; k ++){//当前集合里面有 j  -->  j 已经出现过if (k >> j & 1){if (s[i] - '0' == j)dp[i][j][k] = min(dp[i][j][k], dp[i - 1][j][k]);elsedp[i][j][k] = min(dp[i][j][k], dp[i - 1][j][k] + a[i]);}//当前集合里面没有 j  -->  j 还未出现过, 现在要变成 j //					  -->  第 i - 1 个气球一定不是 j else{// 枚举第 i - 1 个气球的颜色for (int l = 0; l <= 2; l ++){		// k >> l & 1为真:前 i - 1 个气球的颜色集合里必须有 l,因为 i - 1 的颜色为 l // j != l 为真:当前第 i 个气球颜色肯定不能和第 i - 1 个气球颜色相等,若相等则违背集合没有颜色 j 的大条件// s[ i ] - '0' == j 和 != j :分类当前第 i 个气球颜色是否为 j ,需不需要染成 j// 因为 k 和 j 都还在大循环里枚举,并不能保证第一个和第二个条件自然成立,因此需要加入 if 中判断if (k >> l & 1 && l != j && s[i] - '0' == j)dp[i][j][k | 1 << j] = min(dp[i][j][k | 1 << j], dp[i - 1][l][k]);if (k >> l & 1 && l != j && s[i] - '0' != j)dp[i][j][k | 1 << j] = min(dp[i][j][k | 1 << j], dp[i - 1][l][k] + a[i]);}}}ans = INF;for (int j = 0; j <= 2; j ++)for (int k = 1; k < 8; k ++)ans = min(ans, dp[n][j][k]);cout << ans;return 0;
}

http://www.ppmy.cn/news/1555620.html

相关文章

如何实现一套完整的CI/CD?

CI/CD在项目中的作用不可言喻&#xff0c;避免了手工操作的低级失误以及便捷了开发部署项目。首先实现完整CI/CD&#xff0c;需要一些前置知识。 CI是什么&#xff1f; CI是持续化集成。他主要流程其实就是开发将代码上传到Github&#xff0c;持续集成工具&#xff08;Github …

canvas保存图片

需求&#xff1a;上面有几个按钮&#xff0c;其中有一个切换是图片 用v-if会导致图片加载慢 实现方法&#xff1a; 一进来就加载&#xff0c;通过监听元素显示&#xff0c;用于控制canvas的宽高&#xff0c;从而达到隐藏的效果 组件dowolad.vue <template><view …

Java开发者的神经网络进阶指南:深入探讨交叉熵损失函数

前言 今天来讲一下损失函数——交叉熵函数&#xff0c;什么是损失函数呢&#xff1f;大体就是真实与预测之间的差异&#xff0c;这个交叉熵&#xff08;Cross Entropy&#xff09;是Shannon信息论中一个重要概念&#xff0c;主要用于度量两个概率分布间的差异性信息。在信息论…

从零开始:PHP基础教程系列-第1篇:PHP简介与环境搭建

从零开始&#xff1a;PHP基础教程系列 第1篇&#xff1a;PHP简介与环境搭建 一、PHP简介 PHP&#xff08;全称&#xff1a;PHP: Hypertext Preprocessor&#xff09;是一种广泛使用的开源脚本语言&#xff0c;尤其适合用于Web开发。它可以嵌入HTML中&#xff0c;允许开发者轻…

51单片机-内部扩展RAM的应用

RAM是在程序运行中存放随机变量的数据空间&#xff0c;51单片机球认的内部RAM只有128B&#xff0c;c 清于编程者来说&#xff0c;一个芯片的RAM空间越大&#xff0c;RAM不够用怎么办&#xff0c;连过多的变量都不敢定义。写起程序来就越容易得心应手&#xff0c;不会总考忠压前…

数据挖掘之聚类分析

聚类分析&#xff08;Clustering Analysis&#xff09; 是数据挖掘中的一项重要技术&#xff0c;旨在根据对象间的相似性或差异性&#xff0c;将对象分为若干组&#xff08;簇&#xff09;。同一簇内的对象相似性较高&#xff0c;而不同簇间的对象差异性较大。聚类分析广泛应用…

SpringCloud微服务实战系列:03spring-cloud-gateway业务网关灰度发布

目录 spring-cloud-gateway 和zuul spring webflux 和 spring mvc spring-cloud-gateway 的两种模式 spring-cloud-gateway server 模式下配置说明 grayLb://system-server 灰度发布代码实现 spring-cloud-gateway 和zuul zuul 是spring全家桶的第一代网关组件&#x…

dolphinscheduler服务RPC框架源码解析(六)RPC消费者服务设计实现

RPC消费者服务设计实现 1.概述2.RPC消费者服务设计3.RPC消费者服务UML4.RPC消费者服务基本实现4.1.工程结构4.2. NettyRemotingClientFactory类4.3. NettyClientConfig类4.4. NettyRemotingClient类4.5.RPC消费者Handler处理器实现 5.异步请求转同步获取响应消息的设计6.异步请…