笔试训练48天:mari和shiny(动态规划 - 线性dp)

链接:https://ac.nowcoder.com/acm/problem/26226

来源:牛客网

题号:NC26226

时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒

空间限制:C/C++/Rust/Pascal 32 M,其他语言64 M

64bit IO Format: %lld

题目描述

mari每天都非常shiny。她的目标是把正能量传达到世界的每个角落!

有一天,她得到了一个仅由小写字母组成的字符串。

她想知道,这个字符串有多少个"shy"的子序列?

(所谓子序列的含义见样例说明)

输入描述:

复制代码
第一行一个正整数n,代表字符串的长度。(1≤n≤300000)
第二行为一个长度为n,仅由小写字母组成的字符串。

输出描述:

复制代码
一个正整数,代表子序列"shy"的数量。

示例1

输入

复制代码
8
sshhyyau

输出:

8

说明:假设字符串下标从1到8。共有(135)(136)(145)(146)(235)(236)(245)(246)八个"shy"子序列。

备注:mari大喊道:"是shiny不是shy!!!"

思路:动态规划

①:状态表示:si表示:字符串str中0,i区间内有多少个's';

hi:表示0,i区间有多少个'sh';

yi:表示0,i区间有多少个'shy'

②状态转移方程:

③空间优化

cpp 复制代码
#include <iostream>
#include <string>
using namespace std;
int n;
string str;

int main()
{
    cin>>n>>str;
    long long s=0,h=0,y=0; 
    for(int i=0;i<n;i++)
    {
        char ch=str[i];
        if(ch=='s')s++;
        else if (ch=='h')h+=s;
        else if(ch=='y')y+=h;
    }
    cout<<y<<endl;
    return 0;
}
相关推荐
码少女4 小时前
数据结构——B+树基础
数据结构·b树
牧瀬クリスだ4 小时前
Redis Hash实战:高效存储对象与购物车
java·数据库·redis·算法·哈希算法
木井巳4 小时前
【动态规划: 路径问题】下降路径最小和
java·算法·leetcode·动态规划·推荐算法
deepseek235 小时前
OpenAI三项科学发现拆解:3-SAT亚指数算法挑战ETH,AI科学声明的验证流水线怎么搭
人工智能·算法·openai
梦帮科技5 小时前
基于幺正李代数连续归一化流的混合量子生成模型 (HQNN-Flow) 完整技术指南(上部分)
网络·人工智能·算法·量子计算
青少儿编程课堂5 小时前
蓝桥杯青少组 + 全国青少年信息素养大赛 + 电子学会图形化考级|校园推箱子大挑战解析
c++·python·算法·bfs·信息学竞赛
荆棘鸟智能6 小时前
河道采砂船识别与轨迹追踪怎么做?检测、跟踪与电子围栏实战思路
人工智能·算法·目标检测
揽星河..6 小时前
【初阶数据结构】常见的排序算法
数据结构·排序算法·1024程序员节
DFT计算杂谈7 小时前
GSAS-II X 射线衍射(XRD)数据转换为对分布函数(PDF,Pair Distribution Function)
算法·机器学习·pdf
绕灵儿7 小时前
火灾检测-应用场景-YOLO训练记录
人工智能·算法