算法竞赛备赛进阶之状态机模型训练

目录

1.大盗阿福

2.股票买卖IV

3.股票买卖V

4.设计密码


算法状态机(ASM)图是一种描述时序数字系统控制过程的算法流程图,其结构形式类似于计算机中的程序流程图。

ASM图是用一些特定符号按规定的连接方式来描述数字系统的功能。应用ASM图设计数字系统,可以很容易将语言描述的设计问题变成时序流程图的描述,只要描述逻辑设计问题的时序流程图一旦形成,状态函数和输出函数就容易获得,从而得出相应的硬件电路。

1.大盗阿福

阿福是一名经验丰富的大盗。趁着月黑风高,阿福打算今晚洗劫一条街上的店铺。

这条街上一共有 N 家店铺,每家店中都有一些现金。

阿福事先调查得知,只有当他同时洗劫了两家相邻的店铺时,街上的报警系统才会启动,然后警察就会蜂拥而至。

作为一向谨慎作案的大盗,阿福不愿意冒着被警察追捕的风险行窃。

他想知道,在不惊动警察的情况下,他今晚最多可以得到多少现金?

输入格式 输入的第一行是一个整数 T,表示一共有 T 组数据。

接下来的每组数据,第一行是一个整数 N ,表示一共有 N 家店铺。

第二行是 N 个被空格分开的正整数,表示每一家店铺中的现金数量。

每家店铺中的现金数量均不超过1000。

#include<iostream>
#include<algorithm>
#include<cstring>
​
using namespace std;
​
const int N = 100010, INF = 0x3f3f3f3f;
​
int n;
int w[N], f[N][2];
​
int main()
{
    int T;
    cin >> T;
    while(T--)
    {
        cin >> n;
        for(int i = 1;i <= n; i++)
            scanf("%d", &w[i]);
        
        f[0][0] = 0, f[0][1] = -INF;
        for(int i = 1;i <= n; i++)
        {
            f[i][0] = max(f[i - 1][0], f[i - 1][1]);
            f[i][1] = f[i - 1][0] + w[i];
        }
        
        printf("%d\n", max(f[n][0], f[n][1]));
    }
    
    return 0;
}

2.股票买卖IV

给定一个长度为 N 的数组,数组中的第 i 个数字表示一个给定股票在第 i 天的价格。

设计一个算法来计算你所能获取的最大利润,你最多可以完成 k 笔交易。

注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。一次买入卖出合为一笔交易。

输入格式

第一行包含整数 N 和 k,表示数组的长度以及你可以完成的最大交易笔数。

第二行包含 N 个不超过 10000/ 的正整数,表示完整的数组。

#include<iostream>
#include<algorithm>
#include<cstring>
​
using namespace std;
​
const int N = 100010, M = 110, INF = 0x3f3f3f3f;
​
int n, m;
int f[N][M][2], w[N];
​
int main()
{
    scanf("%d%d", &n, &m);
    for(int i = 1;i <= n; i++)
        scanf("%d", &w[i]);
    
    memset(f, -0x3f, sizeof(f));
    
    for(int i = 0;i <= n; i++)
        f[i][0][0] = 0;
    
    for(int i = 1;i <= n; i++)
        for(int j = 1;j <= m; j++)
        {
            f[i][j][0] = max(f[i - 1][j][0], f[i - 1][j][1] + w[i]);
            f[i][j][1] = max(f[i - 1][j][1], f[i - 1][j - 1][0] - w[i]);
        }
    
    int res = 0;
    for(int i = 0;i <= m; i++)
        res = max(res, f[n][i][0]);
    
    printf("%d\n", res);
    
    return 0;
}

3.股票买卖V

#include<iostream>
#include<algorithm>
#include<cstring>
​
using namespace std;
​
const int N = 100010, INF = 0x3f3f3f3f;
​
int n;
int w[N];
int f[N][3];
​
int main()
{
    scanf("%d", &n);
    for(int i = 1;i <= n; i++) scanf("%d", &w[i]);
    
    f[0][0] = f[0][1] = -INF;
    f[0][2] = 0;
    
    for(int i = 1;i <= n; i++)
    {
        f[i][0] = max(f[i - 1][0], f[i - 1][2] - w[i]);
        f[i][1] = f[i - 1][0] + w[i];
        f[i][2] = max(f[i - 1][1], f[i - 1][2]);
    }
    
    printf("%d\n", max(f[n][1], f[n][2]));
    
    return 0;
}

4.设计密码

你现在需要设计一个密码S,S需要满足:

  1. S的长度是N

  2. S质包含小写英文字母

  3. S不包含子串T

例如abc和abcde是abcde的子串,adb不是abcde的子串

请问一共有多少种不同的密码要求?

由于答案会非常大,请输出答案模109+7的余数

输入格式

第一行输入整数N,表示密码的长度。

第二行输入字符串T,T中质保函小写字母。

#include<iostream>
#include<algorithm>
#include<cstring>
​
using namespace std;
​
const int N = 55, mod = 1e9 + 7;
​
int n, m;
char str[N];
int f[N][N];
​
int main()
{
    cin >> n >> str + 1;
    m = strlen(str + 1);
    
    int next[N] = {0};
    for(int i = 2, j = 0;i <= n; i++)
    {
        while(j && str[i] != str[j + 1]) j = next[j];
        if(str[i] == str[j + 1]) j++;
        next[i] = j;
    }
    
    f[0][0] = 1;
    for(int i = 0;i < n; i++)
        for(int j = 0;j <= m; j++)
            for(char k = 'a';k <= 'z'; k++)
            {
                int u = j;
                while(u && k != str[u + 1]) u = next[u];
                if(k == str[u + 1]) u++;
                if(u < m) f[i + 1][u] = (f[i + 1][u] + f[i][j]) % mod;
            }
    
    int res = 0;
    for(int i = 0;i < m; i++)
        res = (res + f[n][i]) % mod;
    
    cout << res << endl;
    
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/158591.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于JavaWeb+SSM+购物系统微信小程序的设计和实现

基于JavaWebSSM购物系统微信小程序的设计和实现 源码获取入口前言主要技术系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 前言 第一章 绪 论 1.1选题背景 互联网是人类的基本需求&#xff0c;特别是在现代社会&#xff0c;…

信号的机制——信号处理函数的注册

在 Linux 操作系统中&#xff0c;为了响应各种各样的事件&#xff0c;也是定义了非常多的信号。我们可以通过 kill -l 命令&#xff0c;查看所有的信号。 # kill -l1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP6) SIGABRT 7) SIGBUS …

计算机毕业设计 基于SpringBoot的医院档案管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

使用 SMI 指标增强股票分析:amCharts JS Crack

使用 SMI 指标增强股票分析 2023 年 11 月 16 日 amCharts 5&#xff1a;股票图表 v5.5.3 增加了对随机动量指数指标的支持&#xff0c;帮助用户做出更明智的交易决策。 amCharts 5&#xff1a;股票图表提供了用于显示基于时间的数据的分析工具&#xff0c;无论是金融、股票还是…

使用群晖Docker搭建HomeAssistant并实现异地公网访问

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《Linux》《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 使用群晖Docker搭建HomeAssistant并实现异地公网访问 文章目录 使用群晖Docker搭建HomeAssistant…

Mac安装Homebrew

方式一&#xff1a;官网&#xff08;很慢&#xff0c;不推荐&#xff09; curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh方式二&#xff1a; 1、执行以下命令 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/ma…

StableDiffusion(六)——局部重绘

目录 一、局部重绘 1.局部重绘基本操作 ①打开方式 ②使用方法 ③核心参数解析 2.局部重绘&#xff08;手涂蒙版&#xff09;功能应用 3.局部重绘&#xff08;上传蒙版&#xff09;功能应用 ①选择选区 ②蒙版制作 一、局部重绘 当我们在进行AI绘画的过程中经常会出现…

JavaWeb[总结]

文章目录 一、Tomcat1. BS 与 CS 开发介绍1.1 BS 开发1.2 CS 开发 2. 浏览器访问 web 服务过程详解(面试题)2.1 回到前面的 JavaWeb 开发技术栈图2.2 浏览器访问 web 服务器文件的 UML时序图(过程) &#xff01; 二、动态 WEB 开发核心-Servlet1. 为什么会出现 Servlet2. 什么是…

linux 查看命令使用说明

查看命令的使用说明的命令有三种&#xff0c;但并不是每个命令都可以使用这三种命令去查看某个命令的使用说明&#xff0c;如果一种不行就使用另外一种试一试。 1.whatis 命令 概括命令的作用 2.命令 --help 命令的使用格式和选项的作用 3.man 命令 命令的作用和选项的详细…

基于Python3的scapy解析SSL报文

scapy对于SSL的支持个人觉得不太好&#xff0c;至少在构造报文方面没有HTTP或者DNS这种常见的报文有效方便&#xff0c;但是scapy对于SSL的解析还是可以的。下面我们以一个典型的HTTPS的报文为例&#xff0c;展示scapy解析SSL报文。 一&#xff1a;解析ClientHello报文 from sc…

Redis对象的数据结构及其原理汇总

本文首发于公众号&#xff1a;Hunter后端 原文链接&#xff1a;Redis对象的数据结构及其底层实现原理汇总 当我们被问到 Redis 中有什么数据结构&#xff0c;或者说数据类型&#xff0c;我们可能会说有字符串、列表、哈希、集合、有序集合。 其实这几种数据类型在 Redis 中都由…

数据结构02附录01:顺序表考研习题[C++]

图源&#xff1a;文心一言 考研笔记整理~&#x1f95d;&#x1f95d; 之前的博文链接在此&#xff1a;数据结构02&#xff1a;线性表[顺序表链表]_线性链表-CSDN博客~&#x1f95d;&#x1f95d; 本篇作为线性表的代码补充&#xff0c;每道题提供了优解和暴力解算法&#xf…

二十一、数组(1)

本章概要 数组特性 用于显示数组的实用程序 一等对象返回数组 简单来看&#xff0c;数组需要你去创建和初始化&#xff0c;你可以通过下标对数组元素进行访问&#xff0c;数组的大小不会改变。大多数时候你只需要知道这些&#xff0c;但有时候你必须在数组上进行更复杂的操作…

KofamScan-KEGG官方推荐的使用系同源和隐马尔可夫模型进行KO注释

文章目录 简介安装使用输入蛋白序列输出detail-tsv格式输出detail格式输出mapper格式 输出结果detail和detail-tsv格式mapper格式常用命令tmp目录 与emapper结果比较其他参数参考 简介 KofamScan 是一款基于 KEGG 直系同源和隐马尔可夫模型&#xff08;HMM&#xff09;的基因功…

oracle21c报错 【ORA-65096: 公用用户名或角色名无效】

1.数据库版本 oracle21c 2.问题提示 创建用户提示【ORA-65096: 公用用户名或角色名无效】 create user 自定义用户名 identified by 密码;--例:用户为test1&#xff0c;密码为123456 create user test1 identified by 123456;三.解决办法及结果 oracle11g之后的版本&#xff…

飞书开发学习笔记(八)-开发飞书小程序Demo

飞书开发学习笔记(八)-开发飞书小程序Demo 一.小程序开发概述 1.1 小程序开发概述 飞书开发文档中查看&#xff1a;小程序开发概述 飞书小程序是指可以运行在飞书客户端中的小程序&#xff0c;小程序的一套代码可以适配 Android、iOS、PC 多平台&#xff0c;且用户体验与飞书…

Android Glide加载transform CenterCrop, CircleCrop ShapeableImageView圆形图并描边,Kotlin

Android Glide加载transform CenterCrop, CircleCrop ShapeableImageView圆形图并描边&#xff0c;Kotlin import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import com.bumptech.glide.load.resource.bitmap.CenterCrop import com.bumptech.glide.…

【MySQL】聚合函数:汇总、分组数据

文章目录 学习目标MAX()、MIN()、AVG()、SUM()、COUNT()COUNT(*) 得到所有记录条目DISTINCT去重练习1&#xff08;使用UNION &#xff0c; SUM&#xff0c; BETEEN AND&#xff09;GROUP BY子句练习2&#xff08;使用sum&#xff0c;group by&#xff0c; join on&#xff0c; …

数据库学习 02-01 关系数据模型详细学习(数据库模式中的一种)

关系型数据模型的相关概念介绍&#xff1a; 01.关系&#xff08;Relation&#xff09; 一个关系对应通常说的一张表 02.元组&#xff08;Tuple&#xff09; 表中的一行即为一个元组&#xff0c;也就是一个对象 03.属性&#xff08;Attribute&#xff09; 表中的一列即为一个属性…

Ingress安全网关

目录 文章目录 目录本节实战TCP 流量拆分&#x1f6a9; 实战&#xff1a;TCP 流量拆分-2023.11.15(测试成功) Ingress安全网关Kubernetes Ingress&#x1f6a9; 实战&#xff1a;Kubernetes Ingress-2023.11.15(测试成功) Ingress GatewayIngress Gateway&#x1f6a9; 实战&am…