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

server/2024/12/18 20:51:18/

目录

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/server/151270.html

相关文章

[Unity]Unity跨平台开发之针对Android开发

用户手册的这一部分包含Android平台关于输入&#xff08;input&#xff09;、资产管理&#xff08;asset management&#xff09;和调试&#xff08;debugging&#xff09;等相关主题的开发信息。 Android移动脚本编写 注意&#xff1a;安卓可以在C#中使用UNITY_ANDROID来进行…

阿里数据仓库-数据模型建设方法总结

一、大数据领域建模综述 1.1 为什么需要数据建模 有结构地分类组织和存储是我们面临的一个挑战。 数据模型强调从业务、数据存取和使用角度合理存储数据。 数据模型方法,以便在性能、成本、效率之间取得最佳平衡 成本:良好的数据模型能极大地减少不必要的数据冗余,也能实现…

k8s中设置annotation的方法总结

k8s中设置annotation的方法总结 annotation是什么 在 Kubernetes 中&#xff0c;Annotations 是一种用于向 Kubernetes 对象附加非标识性元数据的机制。 annotation有什么用 annotation与 Labels 类似&#xff0c;但有一些关键区别和特定用途。 常用于存储与对象相关的配置…

Spring Boot 条件注解:@ConditionalOnProperty 完全解析

在 Spring Boot 项目中&#xff0c;有时候我们希望根据配置文件中的某个属性值来决定是否启用某个功能或加载某个组件。此时&#xff0c;ConditionalOnProperty 注解就可以发挥作用。它通过配置文件的属性值控制 Bean 或配置类的加载&#xff0c;使得我们的程序更具灵活性。 本…

Flink SQL保留关键字

官方参考资料&#xff1a; SQL | Apache Flink 在使用flink时&#xff0c;如果不小心用到了flink保留关键字&#xff0c;会产生关键字错误。关于flink关键字&#xff0c;官方原话是“Although not every SQL feature is implemented yet, some string combinations are alread…

限制redis内存

要限制Redis的内存使用&#xff0c;可以在Redis的配置文件中设置maxmemory参数。以下是如何在Docker环境中限制Redis内存的步骤&#xff1a; 编辑Redis配置文件&#xff1a; 已经创建了Redis的配置文件/mydata/redis/conf/redis.conf&#xff0c;现在需要在这个文件中添加或修…

每天40分玩转Django:Django视图和URL

Django视图和URL 一、课程概述 学习项目具体内容预计用时视图基础函数视图、类视图、视图装饰器90分钟URL配置URL模式、路由系统、命名URL60分钟请求处理请求对象、响应对象、中间件90分钟 二、视图基础 2.1 函数视图 # blog/views.py from django.shortcuts import render…

vue.js数据绑定和事件处理

单元一 vue.js 数据的绑定 学习目标 &#xff08;1&#xff09;插值 &#xff08;2&#xff09;绑定表达式 任务一 插值 1.1任务描述 数据绑定最常见的形式就是使用 “Mustache” 语法&#xff08;双大括号&#xff09;的文本插值&#xff0c;对于所有的数据绑定&#…