首页 > 其他分享 >C. Lazy Narek

C. Lazy Narek

时间:2024-09-19 09:51:03浏览次数:1  
标签:Lazy cur int res auto Narek dp target

https://codeforces.com/contest/2005/problem/C

题意:n个长度为m的字符串,可以任意选取若干个字符串组合起来,然后从中选择narek5个字符拼凑字符串,拼凑成功加5分,如果字母是narek中的其中一个并且没有使用,则扣一分,求最大分数。

思路:dp,维护一个长度为5的数组,依次考虑在当前字符串中以第i个字母为起始字母时,能得到的最大分值。

总结:这里是如何在dp的过程中,保持之前的信息的呢?第一个匹配的字符一定是n,那么dp[0] = 0,后面匹配到了第几个字符,就让第几个字符的下一个代价为0,这样在下一个串中可以接着这个字符进行匹配,当匹配到结尾的时候,在下个串中可以获得的代价就可以+5。

inline void solve(){
    int n, m;
    cin >> n >> m;

    vector<string> a(n);
    for (auto& x : a) {
        cin >> x;
    }

    array<int, 5> dp;
    dp.fill(-INF);
    dp[0] = 0;

    const string target = "narek";

    for (const auto& s : a) {
        auto cur_dp = dp;
        for (int i = 0; i < 5; ++i) {
            int j = i;
            int res = dp[i];
            for (const auto& c : s) {
                if (c == target[j]) {
                    j ++;
                    if (j == 5) {
                        res += 5;
                        j = 0;
                    }
                }
                else if (target.find(c) != target.npos) {
                    res --;
                }
            }
            cur_dp[j] = max(cur_dp[j], res);
        }
        dp = cur_dp;
    }

    int ans = 0;
    for (int i = 0; i < 5; ++i) {
        ans = max(ans, dp[i] - i);
    }

    cout << ans << '\n';
}

标签:Lazy,cur,int,res,auto,Narek,dp,target
From: https://www.cnblogs.com/yxcblogs/p/18419903

相关文章

  • Codeforces Round 972 (Div. 2) 2005C. Lazy Narek 题解
    原题链接:https://codeforces.com/contest/2005/problem/C看了教程发现都是用dp做的,在这里分享一个差不多的SPFA的思路(赛场上忘了Dijkstra不能有负边所以炸了)时间复杂度与dp同样是O(nm)形式化题意和翻译:有n个长度为m的字符串,你可以选择或不选择来拼接它们,但是不能更改字符串的......
  • LazyForEach:数据懒加载
    文章目录前言一、LazyForEach是什么?LazyForEach懒加载的原理和渲染过程使用限制二、使用步骤1.实现提供的一个IDataSource的接口2.将数据包装到对象中,实现一系列增删改查的方法3.ForEach替换为LazyForEach即可总结前言在HarmonyOS中,我们经常会遇到长列表加载的......
  • 线段树(2)——懒惰标记Lazy Tag(单运算)及例题
    上一篇文章我们讲了线段树的最基本的操作。如果有一种操作叫做区间加法呢?这个时候显然可以依次单点修改,但是时间复杂度太高了。所以可以考虑优化,由于思考过程可能很长,此处直接引入懒惰标记。懒惰标记就是在对一颗树的所有节点进行某种统一操作时,只对根节点做一个标记表示它的子树......
  • 设计模式-延迟加载(Lazy Load)
    概念一个对象,它虽然不包含所需要的所有数据,但是知道怎么获取这些数据。加载一个对象会引起大量相关对象的加载,这样会损害系统的性能。延迟加载会暂时终止这个加载过程。运行机制四种实现延迟加载的方法:延迟初始化(Lazyinitialization)。每次访问属性域都要先检查该域是否......
  • 016.Vue3入门,表单输入绑定,以及lazy延时回车才显示
    1、代码如下<template><h3>表单输入绑定</h3><form><!--编辑框内容变化时候,下面标签同步显示编辑框内容--><inputtype="text"v-model:="username"><P>{{username}}</P><!--编辑框内容变化时候,按下回车后,标......
  • Lazysysadmin靶机笔记
    Lazysysadmin靶机笔记概述lazysysadmin是一台Vulnhub靶机,整体比较简单,要对一些存在服务弱口令比较敏感。靶机地址:https://pan.baidu.com/s/19nBjhMpGkdBDBFSnMEDfOg?pwd=heyj提取码:heyj一、nmap扫描1、主机发现#-sn只做ping扫描,不做端口扫描sudonmap-sn192.168.247.1......
  • [三、渲染控制法]4. LazyForEach:数据懒加载
    LazyForEach从提供的数据源中按需迭代数据,并在每次迭代过程中创建相应的组件。当在滚动容器中使用了LazyForEach,框架会根据滚动容器可视区域按需创建组件,当组件滑出可视区域外时,框架会进行组件销毁回收以降低内存占用。接口描述LazyForEach(dataSource:IDataSource,......
  • Lazysysadmin打靶渗透【附代码】(权限提升)
    靶机下载地址:https://download.vulnhub.com/lazysysadmin/Lazysysadmin.ziphttps://download.vulnhub.com/lazysysadmin/Lazysysadmin.zip1.主机发现+端口扫描+目录扫描+敏感信息获取1.1.主机发现nmap-sn192.168.43.0/24|grep-B2'08:00:27:94:96:64'1.2.端口扫描......
  • 使用 useLazyFetch 进行异步数据获取
    title:使用useLazyFetch进行异步数据获取date:2024/7/20updated:2024/7/20author:cmdragonexcerpt:摘要:“使用useLazyFetch进行异步数据获取”介绍了在Nuxt开发中利用useLazyFetch进行异步数据加载的方法,强调其立即触发导航特性,与useFetch相似的使用方式,以及如何......
  • 使用 useLazyAsyncData 提升数据加载体验
    title:使用useLazyAsyncData提升数据加载体验date:2024/7/19updated:2024/7/19author:cmdragonexcerpt:摘要:本文介绍useLazyAsyncData函数在Nuxt3中的使用,以提升数据加载体验。此函数支持异步获取数据并在组件中处理挂起与错误状态,通过pending、error和data属性实......