2022牛客寒假训练营1-K冒险公社

题解:
怎么说呢,可能最近做的dp题有点多,有种万物皆dp的感觉
由题目可以看出给定的预测结果与i , i − 1 , i − 2有关且前2 点无法预测,那么我们可以枚举每种情况去判断。
由于dp问题的使用条件是1.最优子结构 2.不具有后效性
本题是一个线性递推的过程,存在最优子结构
那么我们可以将问题从n个岛的最多绿岛数量简化为考虑前i个岛屿,且i为a岛,i-1为b岛,i-2为c岛时的最多绿岛数
由此得出状态表达式:dp[i][a][b][c]
当然也可以简化表达式为dp[i][j][k],集合为前i座岛,i为j,i-1为k的最优解
由此得出dp[i][j][k]=max(dp[i][j][k],dp[i−1][k][l]+(j==2))//0为黑岛,1为红岛,2为绿岛

#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <string>
#include <cstring>
#include <vector>
using namespace std;
#define IOS ios::sync_with_stdio(0), cin.tie(0),cout.tie(0)
#define endl "\n"
typedef long long ll;
typedef pair<int ,int> PII;
const int INF=0x3f3f3f3f;
const int mod=998244353;
const int N=1e5+5;
char s[N];
int dp[N][3][3];
int main()
{IOS;int n;cin>>n;cin>>(s+1);//初始化dp,因为0座绿岛也是合法情况,所以不能初始化为0memset(dp,-INF,sizeof dp);//初始化前两座岛的绿岛数量(因为不能预测)for (int i=0;i<=2;i++)for (int j=0;j<=2;j++)dp[2][i][j]=(i==2)+(j==2);//枚举从第三座岛开始的情况for (int i=3;i<=n;i++)for (int j=0;j<=2;j++)for (int k=0;k<=2;k++)for (int l=0;l<=2;l++){//统计岛屿的情况,如果是冒绿光说明绿岛比黑岛多,冒红光说明红岛比绿岛多,冒黑光说明绿岛和红岛一样多int t=j+k+l;if ((s[i]=='R' &&t>=3) || (s[i]=='G' && t<3) || (s[i]=='B' && t!=3)) continue;dp[i][j][k]=max(dp[i][j][k],dp[i-1][k][l]+(j==2));}int res=-INF;for (int i=0;i<=2;i++)for (int j=0;j<=2;j++)res=max(res,dp[n][i][j]);if (res>=0) cout<<res<<endl;else cout<<-1<<endl;return 0;
}

2022牛客寒假训练营1-K冒险公社相关推荐

  1. 2022牛客寒假算法基础集训营3 签到题7题(附基础集训营1-3签到题总结)

    1.A-智乃的Hello XXXX 签到 #include<bits/stdc++.h> using namespace std; int main(){cout<<" ...

  2. 2022牛客寒假算法基础集训营6 签到题5题(附基础集训营4-6签到题总结)

    1.I-A+B问题 模拟,类似于高精度,竖式运算 #include<bits/stdc++.h> using namespace std; typedef long long LL; in ...

  3. 2022牛客寒假算法基础集训营

    2022牛客寒假算法基础集训营1 C-Baby's first attempt on CPU D-牛牛做数论 已知欧拉函数 ϕ ( x ) \phi(x) ϕ(x)是满足 1 ≤ y ≤ x 1\le ...

  4. 2022牛客寒假算法基础集训营1 L E J H F C D A I (9/13)

    2022牛客寒假算法基础集训营1 L E J H F C D A I (9/13) L 牛牛学走路 思路: 模拟,用一个 M A X MAX MAX存储. 参考代码: #include<bits ...

  5. 牛客寒假训练营4-爆炸的符卡洋洋洒洒 (dp变形)

    题意: 链接:登录-专业IT笔试面试备考平台_牛客网 来源:牛客网 小红正在研究如何把符卡组合出尽可能大威力的组合魔法. 小红共有 n 种符卡可以选择,每种符卡最多只能选择一次,每个符卡的魔力消耗为 ...

  6. 2022牛客寒假算法基础集训营1 ——H 牛牛看云

    链接:登录-专业IT笔试面试备考平台_牛客网 来源:牛客网 就像罗夏墨迹测试一样,同一片形状的云在不同人的眼中会看起来像各种各样不同的东西. 例如,现在天上飘过了一片长条状的云彩,hina说这片云长得 ...

  7. 2022牛客寒假算法基础集训营5 K造梦小孩

    题目:造梦小孩 众所周知,九峰喜欢玩造梦西游. 孙悟空是造梦西游工作室的宠儿,从七魔王到上古天帝篇最强的角色都是孙悟空,九峰在用悟空通关了造梦西游1-5后决定重新玩一遍唐僧,希望能磨练自己的技术,而不 ...

  8. 2022牛客寒假算法基础集训营4 签到题7题

    1.E-真假签到题 不难发现,或者随便枚举一下,可以得到f(n)=n的结论 #include<bits/stdc++.h> typedef long long LL; using name ...

  9. 2022牛客寒假算法基础集训营4 B、 G两题

    B 这是一道很好的线段树练习题,思路很清晰,查询区间进制最小值所对应的进制显然应该是区间最大值+1,所以使用一个线段树维护区间最大值:那么如何维护区间进制呢?让另外一颗线段树记录数字信息即可 之前没做 ...

  10. 2021牛客寒假训练营5D石子游戏(差分)

    这个题无解的情况后台数据高达80%,一开始过了10%以为写假了 光巨昨晚讲的太好了,今天上线写一下 题目大意: 给你n堆石子和一个区间k,每次对一个长度一定为k的区间里的所有数字加一,问最少操作次数使 ...

最新文章

  1. (C++)1021 个位数统计
  2. 基于Apache Spark的机器学习及神经网络算法和应用
  3. 队列化栈栈化队列(力扣)
  4. crypto-RSA-常用解密代码块
  5. mysql记录操作日志
  6. php队列会停止执行吗,php – Laravel Artisan CLI安全地停止守护程序队列工作者
  7. sas 检测到开型代码语句的递归_对于标准答案的递归很多人都看不懂,其实就是一个深度优先的遍历。我写了段伪代码,将递归步骤还原并注释了一下,供大家参考,希望大家有所收获。...
  8. android限制第三方应用安装软件,如何从Android中的未知来源安装应用程序 | MOS86...
  9. addLoadEvent方法解析
  10. Java 13新特性:switch表达式,文本块
  11. OpenCV编译时提示错误“ Built target libprotobuf”
  12. 小米案例分析PPT模板
  13. 取消磁盘介质写入保护
  14. 什么是IT和什么是IT行业
  15. 【总结】计算机网络原理
  16. 1977年图灵奖--约翰·巴克斯简介
  17. 生活中的统计概率思维
  18. 上拉加载更多其他方法
  19. 文件包含漏洞(LFI、RFI)(require()、include()函数)
  20. python属性访问权限_已拒绝Firefox驱动程序对“U”属性的访问权限

热门文章

  1. aspose合并单元格
  2. (转帖)微服务拆分的原则和方法(2)
  3. vue 自动播放语音
  4. 您的Android版本不兼容,android – “你的设备与此版本不兼容”
  5. 单片机波形发生c语言,51单片机波形发生器程序设计
  6. php app 银联支付,php银联网页支付实现方法
  7. Serialize Your Deck with Positron [XML Serialization, XSD, C#]
  8. python爬虫爬取糗百成人图片单线程版本
  9. 如何除去Windows的快捷方式小图标
  10. python爬取奇书网小说