• CF1090D Easy Problem


    题目链接:https://www.luogu.org/problem/CF1096D

    题意:给你一个字符串,字符串每个位置处有一个代价wi,需要删去一些字符,使得字符串不存在子序列“hard”,求最小代价

    分析:我们用dp[i]表示不存在hard的前i个字符所需要的最小代价

    dp[4]的话前一个dp[4]加上该字符d减去的代价后和dp[3]作比较,取较小的

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int maxn=1e5+7;
    const int N=maxn*20;
    const ll inf=0x3f3f3f3f;
    #define mem0(a) memset(a,0,sizeof(a))
    char a[maxn];
    ll w;
    ll dp[5];
    int main(){
        int len;
        scanf("%d",&len);
        scanf("%s",a+1);
        //int len=strlen(a+1);
        for(int i=1;i<=len;i++){
            scanf("%I64d",&w);
            if(a[i]=='h') dp[1]+=w;
            else if(a[i]=='a') dp[2]=min(dp[1],dp[2]+w);
            else if(a[i]=='r') dp[3]=min(dp[2],dp[3]+w);
            else if(a[i]=='d') dp[4]=min(dp[3],dp[4]+w);
        }
        printf("%I64d
    ",dp[4]);
        return 0;
    }
  • 相关阅读:
    命令行选项
    损坏的RAID5
    Codeforces Round #600 (Div. 2)
    python 数据分析
    xor or and 线段树
    CCPC哈尔滨E题
    二维偏序
    Codeforces Round #592 (Div. 2)
    Codeforces Round #597 (Div. 2)
    pycharm 安装激活
  • 原文地址:https://www.cnblogs.com/qingjiuling/p/11496369.html
Copyright © 2020-2023  润新知