[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++
[CSP-S模拟测试]:可爱的精灵宝贝(搜索)的更多相关文章
- NOIP模拟测试2「排列 (搜索)·APIO划艇」
排序 内存限制:128 MiB 时间限制:1000 ms 标准输入输出 题目描述 输入格式 数据范围与提示 对于30%的数据,1<=N<=4: 对于全部的数据,1<=N< ...
- [jzoj 5770]【2018提高组模拟A组8.6】可爱精灵宝贝 (区间dp)
传送门 Description Branimirko是一个对可爱精灵宝贝十分痴迷的玩家.最近,他闲得没事组织了一场捉精灵的游戏.游戏在一条街道上举行,街道上一侧有一排房子,从左到右房子标号由1到n. ...
- 2019.8.12 NOIP模拟测试18 反思总结
写个博客总是符合要求的对吧 回来以后第一次悄悄参加考试,昨天全程围观… 然后喜提爆炸120分wwwwwwwww T1用了全机房最慢的写法,导致改掉死循环T掉的一个点以后还是死活过不了最后一个点.T2全 ...
- Android单元测试与模拟测试详解
测试与基本规范 为什么需要测试? 为了稳定性,能够明确的了解是否正确的完成开发. 更加易于维护,能够在修改代码后保证功能不被破坏. 集成一些工具,规范开发规范,使得代码更加稳定( 如通过 phabri ...
- [开源]微信在线信息模拟测试工具(基于Senparc.Weixin.MP开发)
目前为止似乎还没有看到过Web版的普通消息测试工具(除了官方针对高级接口的),现有的一些桌面版的几个测试工具也都是使用XML直接请求,非常不友好,我们来尝试做一个“面向对象”操作的测试工具. 测试工具 ...
- 安装nginx python uwsgi环境 以及模拟测试
uwsgi帮助文档: http://uwsgi-docs-cn.readthedocs.io/zh_CN/latest/WSGIquickstart.html http://uwsgi-docs.re ...
- 利用Python中的mock库对Python代码进行模拟测试
这篇文章主要介绍了利用Python中的mock库对Python代码进行模拟测试,mock库自从Python3.3依赖成为了Python的内置库,本文也等于介绍了该库的用法,需要的朋友可以参考下 ...
- 转 C#实现PID控制的模拟测试和曲线绘图
C#实现PID控制的模拟测试和曲线绘图 本文分两部分,一部分是讲PID算法的实现,另一部分是讲如何用动态的曲线绘制出PID运算的结果. 首先,PID算法的理论模型请参考自动控制理论,最早出现的是模 ...
- Mockito:一个强大的用于Java开发的模拟测试框架
https://blog.csdn.net/zhoudaxia/article/details/33056093 介绍 本文将介绍模拟测试框架Mockito的一些基础概念, 介绍该框架的优点,讲解应用 ...
随机推荐
- APlayer 媒体播放引擎
APlayer媒体播放引擎 Windows平台的播放内核 封闭式 DirectShow 架构,不受系统解码环境干扰 全媒体文件格式支持 丰富的媒体文件传输协议(http/https/ftp/mms/r ...
- 【MM系列】SAP MM模块-组织结构第二篇
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP MM模块-组织结构第二篇 ...
- Python json函数与Flask jsonify函数
JSON数据结构 要把json与字典区分开来 dumps(字典转换成Json) loads(Json转换成字典) 参考: Python 的字典是一种数据结构,JSON 是一种数据格式. json 就是 ...
- oracle--单表查询
---单表的查询学习 --查询表的所有数据 select * from 表名;*代表所有 select * from emp; --查询表中指定字段的值 select 字段名1,字段名2,...fro ...
- 手把手教你用Pytorch-Transformers——实战(二)
本文是<手把手教你用Pytorch-Transformers>的第二篇,主要讲实战 手把手教你用Pytorch-Transformers——部分源码解读及相关说明(一) 使用 PyTorc ...
- jdk与eclipse安装注意事项
1.安装这两个软件,一定要注意使得两个软件的版本是一致的: 1.1编写小程序测试jdk的版本号: public class Text{ public static void main(String[] ...
- Java-集合第六篇操作集合的工具类Collections
1.Java提供了一个操作Set.List.Map等集合的工具类:Collections. 工具类中提供的方法主要针对Set.List.Map的排序.查询.修改等操作,以及将集合对象设置为不可变.对集 ...
- 洛谷 P3182 [HAOI2016]放棋子(高精度,错排问题)
传送门 解题思路 不会错排问题的请移步——错排问题 && 洛谷 P1595 信封问题 这一道题其实就是求对于每一行的每一个棋子都放在没有障碍的地方的方案数. 因为障碍是每行.每列只有一 ...
- 靶形数独 (dfs+预处理+状态压缩)
#2591. 「NOIP2009」靶形数独 [题目描述] 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们 ...
- k3 cloud套打模板中绑定加税合价字段的时候数据都为空,不绑定的时候显示正常
检查bos中加税合计字段,是不是关联币别绑定错误