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;
}
相关推荐
aramae6 小时前
MySQL复合查询(8)
java·c语言·开发语言·后端·算法
荆棘鸟智能6 小时前
城市感知设备怎么统一接入?从多协议网关到设备模型的中间件架构设计
人工智能·算法·边缘计算
INGNIGHT10 小时前
270 · 电话号码的字母组合II(Trie)
linux·算法
2401_8390805410 小时前
C++常见八股
数据结构·c++·算法
青山是哪个青山11 小时前
LeetCode 188:买卖股票的最佳时机 IV
算法
mikuyyds11 小时前
geo-toolbox 插件算法解析:RUSLE 与 MUSLE 的工程化落地
算法·rust·gis
a1879272183111 小时前
【算法】树(二):队列与祖先——BFS 骨架三配件、短路透传与合流
算法·leetcode·二叉树··bfs·算法讲解·树遍历
syagain_zsx12 小时前
算法基础篇 · 03 枚举(C++ 题解)
c++·算法·二进制·枚举
weixin_3077791312 小时前
C++代码实现MATLAB中的ode23tb函数功能
开发语言·c++·算法·matlab
我是章汕呐13 小时前
地级市能源消耗量及消耗强度数据【2006-2023年】平衡面板
人工智能·经验分享·算法·回归