蓝桥杯真题 - 填充 - 题解

题目链接:https://www.lanqiao.cn/problems/3519/learning/

个人评价:难度 1 星(满星:5)

前置知识:动态规划


整体思路

  • 设 d p [ i ] dp[i] dp[i] 表示到前 i i i 个字符能替换出最多的 00 , 11 00,11 00,11 子串个数,当第 i − 1 i-1 i−1 与第 i i i 个字符至少有一个为 ? 或者两个字符相同时, d p [ i ] = d p [ i − 2 ] + 1 dp[i]=dp[i-2]+1 dp[i]=dp[i−2]+1,否则 d p [ i ] = d p [ i − 1 ] dp[i]=dp[i-1] dp[i]=dp[i−1];

过题代码

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

typedef long long LL;
const int maxn = 1000000 + 100;
int n;
char str[maxn];
int dp[maxn];

int main() {
#ifdef ExRoc
    freopen("test.txt", "r", stdin);
#endif // ExRoc
    ios::sync_with_stdio(false);

    scanf("%s", str + 1);
    n = strlen(str + 1);
    for (int i = 2; i <= n; ++i) {
        if (str[i] == '?' || str[i - 1] == '?' || str[i] == str[i - 1]) {
            dp[i] = dp[i - 2] + 1;
        } else {
            dp[i] = dp[i - 1];
        }
    }
    cout << dp[n] << endl;

    return 0;
}
相关推荐
代码雕刻家4 小时前
2.4.蓝桥杯-分巧克力
算法·蓝桥杯
Ulyanov5 小时前
顶层设计——单脉冲雷达仿真器的灵魂蓝图
python·算法·pyside·仿真系统·单脉冲
智者知已应修善业6 小时前
【查找字符最大下标以*符号分割以**结束】2024-12-24
c语言·c++·经验分享·笔记·算法
91刘仁德6 小时前
c++类和对象(下)
c语言·jvm·c++·经验分享·笔记·算法
diediedei7 小时前
模板编译期类型检查
开发语言·c++·算法
阿杰学AI7 小时前
AI核心知识78——大语言模型之CLM(简洁且通俗易懂版)
人工智能·算法·ai·语言模型·rag·clm·语境化语言模型
mmz12077 小时前
分治算法(c++)
c++·算法
一切尽在,你来7 小时前
C++多线程教程-1.2.1 C++11/14/17 并发特性迭代
开发语言·c++
睡一觉就好了。7 小时前
快速排序——霍尔排序,前后指针排序,非递归排序
数据结构·算法·排序算法
80530单词突击赢7 小时前
C++入门指南:从零到精通
开发语言·c++