【编程题-错题集】abb(动态规划)

2024-05-27 10:52
文章标签 动态 规划 编程 错题 abb

本文主要是介绍【编程题-错题集】abb(动态规划),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

牛客对应题目链接:abb_牛客题霸_牛客网 (nowcoder.com)


一、分析题目

线性 dp + 哈希表


1、状态表示

dp[i]:表示以 i 位置元素为结尾的所有子序列中,有多少个 _xx。


2、返回值

整张 dp 表的和。


3、状态转移方程

更新顺序:

  1. dp[i] = f[x](前)(这里是更新前的 f[x],且可以不用创建 dp)
  2. f[x](后) = f[x](前) + i - g[x](前)
  3. g[x](后) = g[x](前) + 1
  • f[26]:更新前:[0, i-1] 区间内有多少个 _x;更新后:[0, i] 区间内有多少个 _x。
  • g[26]:更新前:[0, i-1] 区间内有多少个 x;更新后:[0, i] 区间内有多少个 x。

二、代码

//值得学习的代码
//写法一
#include <iostream>
using namespace std;typedef long long LL;
const int N = 1e5+10;
char s[N];
LL dp[N];
LL f[26], g[26];int main()
{int n;cin >> n >> s;LL res=0;for(int i=0; i<n; i++){int x=s[i]-'a';dp[i]=f[x];res+=dp[i];f[x]=f[x]+(i-g[x]);g[x]=g[x]+1;}cout << res << endl;return 0;
}//写法二
#include <iostream>
using namespace std;typedef long long LL;const int N = 1e5 + 10;int n;
char s[N];
LL f[26];
LL g[26];int main()
{cin >> n >> s;LL ret = 0;for(int i = 0; i < n; i++){int x = s[i] - 'a';ret += f[x];f[x] = f[x] + i - g[x];g[x] = g[x] + 1;}cout << ret << endl;return 0;
}

三、反思与改进

完全没思路的时候可以尝试着多建几个变量来保存需要的值,这类题需要多做几次,锻炼思维。

这篇关于【编程题-错题集】abb(动态规划)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1007273

相关文章

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

Spring Gateway动态路由实现方案

《SpringGateway动态路由实现方案》本文主要介绍了SpringGateway动态路由实现方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录前沿何为路由RouteDefinitionRouteLocator工作流程动态路由实现尾巴前沿S

Python动态处理文件编码的完整指南

《Python动态处理文件编码的完整指南》在Python文件处理的高级应用中,我们经常会遇到需要动态处理文件编码的场景,本文将深入探讨Python中动态处理文件编码的技术,有需要的小伙伴可以了解下... 目录引言一、理解python的文件编码体系1.1 Python的IO层次结构1.2 编码问题的常见场景二

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键

AOP编程的基本概念与idea编辑器的配合体验过程

《AOP编程的基本概念与idea编辑器的配合体验过程》文章简要介绍了AOP基础概念,包括Before/Around通知、PointCut切入点、Advice通知体、JoinPoint连接点等,说明它们... 目录BeforeAroundAdvise — 通知PointCut — 切入点Acpect — 切面

C#异步编程ConfigureAwait的使用小结

《C#异步编程ConfigureAwait的使用小结》本文介绍了异步编程在GUI和服务器端应用的优势,详细的介绍了async和await的关键作用,通过实例解析了在UI线程正确使用await.Conf... 异步编程是并发的一种形式,它有两大好处:对于面向终端用户的GUI程序,提高了响应能力对于服务器端应

浅谈MySQL的容量规划

《浅谈MySQL的容量规划》进行MySQL的容量规划是确保数据库能够在当前和未来的负载下顺利运行的重要步骤,容量规划包括评估当前资源使用情况、预测未来增长、调整配置和硬件资源等,感兴趣的可以了解一下... 目录一、评估当前资源使用情况1.1 磁盘空间使用1.2 内存使用1.3 CPU使用1.4 网络带宽二、

C# async await 异步编程实现机制详解

《C#asyncawait异步编程实现机制详解》async/await是C#5.0引入的语法糖,它基于**状态机(StateMachine)**模式实现,将异步方法转换为编译器生成的状态机类,本... 目录一、async/await 异步编程实现机制1.1 核心概念1.2 编译器转换过程1.3 关键组件解析