[CSP-S模拟测试]:可爱的精灵宝贝(搜索)

2024-03-21 15:50

本文主要是介绍[CSP-S模拟测试]:可爱的精灵宝贝(搜索),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述

$Branimirko$是一个对可爱精灵宝贝十分痴迷的玩家。最近,他闲得没事组织了一场捉精灵的游戏。游戏在一条街道上举行,街道上一侧有一排房子,从左到右房子标号由$1$到$n$。
刚开始玩家在$k$号房子前。有$m$个精灵,第$i$只精灵在第$A_i$栋房子前,分值是$B_i$,以及它在$T_i$秒内(含)存在,之后消失。$Branimirko$可以选择移动至相邻的房子,耗时$1$秒。抓住精灵不需要时间,精灵被抓住后消失。时间从第$1$秒开始。$Branimirko$能最多获得多少分值和。


输入格式

输入的第$1$行为三个正整数$n$,$k$,$m$。
接下来$m$行描述精灵的信息,分别为$A_i$,$B_i$,$T_i$。


输出格式

输出$Branimirko$能最多获得多少分值和。


样例

样例输入:

10 5 4
1 30 4
3 5 7
7 10 12
9 100 23

样例输出:

115


数据范围与提示

样例解释:

很遗憾,它恰好不能抓住在一号房子前的精灵。
如果$T_1$改成$5$,答案就是$145$。

数据范围:

$20\%$的数据:$m\leqslant 10$。
$40\%$的数据:$m\leqslant 20$。
$k\leqslant n\leqslant 1000,m\leqslant 100,A_i\leqslant N,B_i\leqslant 100,T_i\leqslant 2,000$,所有数为正整数。


题解

正解是个$DP$,我不会,所以我来打搜索。

首先,我们要明确两点:

 $\alpha.$第一次到的时候就把当前位置的精灵(如果有的话)抓走,肯定不劣。

 $\beta.$如果没有抓到精灵就回头肯定是不优的。

 $\gamma.$如下图中:

  

  假设$1,2,3$都有精灵,而我们要去$1$抓精灵,那么可以分解为:先去$2$抓精灵,然后再到$1$抓精灵。

根据如上三条性质,我们的搜索分为两种情况:

 $\alpha.$向左走,抓第一只能抓到的精灵。

 $\beta.$向右走,抓第一只能抓到的精灵。

时间复杂度降低了不少,更是可以通过预处理接着降低时间复杂度。

对比大概是这样子的:

搜索:

正解:

时间复杂度:$\Theta($玄学$)$。

期望得分:$40$分。

实际得分:$100$分。


代码时刻

#include<bits/stdc++.h>
using namespace std;
struct rec{int a,b,t,id;}e[200];
int n,k,m;
int ans;
bool vis[1001],wzc[200];
int minr;
bool cmp(rec a,rec b){return a.a<b.a;}
void dfs(int x,int w,int t)
{for(int i=e[x].id;i;i--)if(e[i].t>=abs(e[x].a-e[i].a)+t&&!wzc[i]){wzc[i]=1;dfs(e[i].id,w+e[i].b,t+abs(e[x].a-e[i].a));wzc[i]=0;break;}for(int i=e[x].id;i<=m;i++)if(e[i].t>=abs(e[x].a-e[i].a)+t&&!wzc[i]){wzc[i]=1;dfs(e[i].id,w+e[i].b,t+abs(e[x].a-e[i].a));wzc[i]=0;break;}ans=max(ans,w);
}
int main()
{scanf("%d%d%d",&n,&k,&m);for(int i=1;i<=m;i++){scanf("%d%d%d",&e[i].a,&e[i].b,&e[i].t);vis[e[i].a]=1;}sort(e+1,e+m+1,cmp);for(int i=1;i<=m;i++)e[i].id=i;for(int i=1;i<=m;i++)if(e[i].a>=k){minr=e[i].id;break;}if(!minr){dfs(m,0,abs(e[m].a-k)+1);goto nxt;}if(e[minr].a==k)dfs(e[minr].id,0,1);else{dfs(e[minr-1].id,0,abs(e[minr-1].a-k)+1);dfs(e[minr].id,0,abs(e[minr].a-k)+1);}nxt:;cout<<ans<<endl;return 0;
}

rp++

转载于:https://www.cnblogs.com/wzc521/p/11352753.html

这篇关于[CSP-S模拟测试]:可爱的精灵宝贝(搜索)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

HTML5 搜索框Search Box详解

《HTML5搜索框SearchBox详解》HTML5的搜索框是一个强大的工具,能够有效提升用户体验,通过结合自动补全功能和适当的样式,可以创建出既美观又实用的搜索界面,这篇文章给大家介绍HTML5... html5 搜索框(Search Box)详解搜索框是一个用于输入查询内容的控件,通常用于网站或应用程

Python使用pynput模拟实现键盘自动输入工具

《Python使用pynput模拟实现键盘自动输入工具》在日常办公和软件开发中,我们经常需要处理大量重复的文本输入工作,所以本文就来和大家介绍一款使用Python的PyQt5库结合pynput键盘控制... 目录概述:当自动化遇上可视化功能全景图核心功能矩阵技术栈深度效果展示使用教程四步操作指南核心代码解析

python多线程并发测试过程

《python多线程并发测试过程》:本文主要介绍python多线程并发测试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、并发与并行?二、同步与异步的概念?三、线程与进程的区别?需求1:多线程执行不同任务需求2:多线程执行相同任务总结一、并发与并行?1、

Python模拟串口通信的示例详解

《Python模拟串口通信的示例详解》pySerial是Python中用于操作串口的第三方模块,它支持Windows、Linux、OSX、BSD等多个平台,下面我们就来看看Python如何使用pySe... 目录1.win 下载虚www.chinasem.cn拟串口2、确定串口号3、配置串口4、串口通信示例5

Python使用DeepSeek进行联网搜索功能详解

《Python使用DeepSeek进行联网搜索功能详解》Python作为一种非常流行的编程语言,结合DeepSeek这一高性能的深度学习工具包,可以方便地处理各种深度学习任务,本文将介绍一下如何使用P... 目录一、环境准备与依赖安装二、DeepSeek简介三、联网搜索与数据集准备四、实践示例:图像分类1.

CSS模拟 html 的 title 属性(鼠标悬浮显示提示文字效果)

《CSS模拟html的title属性(鼠标悬浮显示提示文字效果)》:本文主要介绍了如何使用CSS模拟HTML的title属性,通过鼠标悬浮显示提示文字效果,通过设置`.tipBox`和`.tipBox.tipContent`的样式,实现了提示内容的隐藏和显示,详细内容请阅读本文,希望能对你有所帮助... 效

SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程

《SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程》本文详细介绍了如何在虚拟机和宝塔面板中安装RabbitMQ,并使用Java代码实现消息的发送和接收,通过异步通讯,可以优化... 目录一、RabbitMQ安装二、启动RabbitMQ三、javascript编写Java代码1、引入

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

使用Python绘制可爱的招财猫

《使用Python绘制可爱的招财猫》招财猫,也被称为“幸运猫”,是一种象征财富和好运的吉祥物,经常出现在亚洲文化的商店、餐厅和家庭中,今天,我将带你用Python和matplotlib库从零开始绘制一... 目录1. 为什么选择用 python 绘制?2. 绘图的基本概念3. 实现代码解析3.1 设置绘图画