mari和shiny() (多状态dp数组)

mari和shiny

这个用到多状态的线性dp,以往都是一个dp数组,但是这个存在三个dp数组。

cpp 复制代码
#include<bits/stdc++.h>
#include<iostream>
using namespace std;
long long s[300000];
long long h[300000];
long long y[300000];

int main()
{
    int n; cin>>n;
    string str;
    cin>>str;
    s[0]=str[0]=='s'?1:0;
    for(int i=1;i<str.size();i++){
        if(str[i]=='s') s[i]=s[i-1]+1;
        else s[i]=s[i-1];
        
        if(str[i]=='h') h[i]=s[i-1]+h[i-1];
        else h[i]=h[i-1];
        
        if(str[i]=='y') y[i]=h[i-1]+y[i-1];
        else y[i]=y[i-1];
    }
    cout<<y[str.size()-1];
}

空间优化后的代码:

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

int main()
{
    int n; cin>>n;
    string str;
    cin>>str;
    s=str[0]=='s'?1:0;
    for(int i=1;i<str.size();i++){
        if(str[i]=='s') s+=1;
        
        if(str[i]=='h') {h+=s;}
        
        if(str[i]=='y') {y+=h;}
    }
    cout<<y;
}
相关推荐
CoderYanger1 小时前
C.滑动窗口-越长越合法/求最短/最小——2904. 最短且字典序最小的美丽子字符串
java·开发语言·数据结构·算法·leetcode·1024程序员节
Tim_101 小时前
【算法专题训练】33、堆
算法
Salt_07281 小时前
DAY25 奇异值SVD分解
python·算法·机器学习
℉AVE1 小时前
点集配准---迭代最近点算法ICP(Iterative Closest Point)
算法
大数据魔法师1 小时前
聚类算法(一)- K-Means聚类
算法·kmeans·聚类
CoderYanger1 小时前
A.每日一题——2141.同时运行N台电脑的最长时间
java·算法·leetcode·职场和发展·1024程序员节
Ayanami_Reii1 小时前
进阶数据结构-线段树
数据结构·算法·线段树
liu****1 小时前
11.字符函数和字符串函数(一)
linux·运维·c语言·开发语言·数据结构·算法
aini_lovee1 小时前
基于UERD算法的JPEG图像隐写MATLAB实现
开发语言·算法·matlab