首页 > 其他分享 >CF2005C Lazy Narek

CF2005C Lazy Narek

时间:2024-09-22 22:49:12浏览次数:1  
标签:Lazy int work char CF2005C Narek

记录dp的设计。一开始设计的是f[i][j]表示最后一个选i,匹配到j的最大值,然而这样转移是\(n^2\)的,题目要求\(n*m\). 设计成0,1背包,考虑第i个选择或者不选择即可。

#include<bits/stdc++.h>
using namespace std;
const int N = 1e3 + 11;
int f[N][6];
int lef[N][6], val[N][6], to[N][6];
int len;
bool mark[N];
char s[N][N];
char S[] = {'n', 'a', 'r', 'e', 'k'};
void work(){
    int n, m;
    cin>>n>>m;
    for(int i = 1;i <= n; i++){
        scanf("%s", s[i]);
    }
    len = strlen(s[1]);
    for(int i = 0;i <= 4; i++){
        for(int j = 1;j <= n; j++){
            lef[j][i] = 0;
            int cnt = 0;
            int pos = i;
            for(int k = 0;k < len; k++){
                if(s[j][k] == S[pos]){
                    pos++;
                    if(pos == 5)cnt += 1, pos -= 5;
                }
                else {
                    bool flag = false;
                    for(int l = 0;l < 5; l++)if(s[j][k] == S[l])flag = true;
                    lef[j][i] += flag;
                }
            }
            to[j][i] = pos;
            val[j][i] = 5 * cnt;
        }
    }
    for(int i = 0;i <= n; i++){
        for(int j = 0;j < 5; j++)f[i][j] =  (i == 0 && j == 0) ? 0 : -1e8;
    }
    for(int i = 0;i < n; i++){
        for(int j = 0;j < 5; j++)f[i+1][j] = f[i][j];
        for(int j = 0;j < 5; j++){
            f[i+1][to[i+1][j]] = max(f[i+1][to[i+1][j]], f[i][j] + val[i+1][j] - lef[i+1][j]);
        }
    }
    int res = 0;
    for(int j = 0;j < 5; j++){
      res = max(res, f[n][j] - j);
    }
    cout<<res<<endl;
}
int main(){
    int T;
    cin>>T;
    while(T--)work();
    return 0;
}

标签:Lazy,int,work,char,CF2005C,Narek
From: https://www.cnblogs.com/dqk2003/p/18426031

相关文章

  • C. Lazy Narek
    https://codeforces.com/contest/2005/problem/C题意:n个长度为m的字符串,可以任意选取若干个字符串组合起来,然后从中选择narek5个字符拼凑字符串,拼凑成功加5分,如果字母是narek中的其中一个并且没有使用,则扣一分,求最大分数。思路:dp,维护一个长度为5的数组,依次考虑在当前字符串中以......
  • 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相似的使用方式,以及如何......