2018.08.06【2018提高组】模拟A组题解 可爱精灵宝贝

7 篇文章 0 订阅
7 篇文章 0 订阅

T2:

5770. 【2018提高组模拟A组8.6】可爱精灵宝贝 

题目描述

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

【数据范围】

20%的数据:m≤10
40%的数据:m≤20
k≤n≤1000,m≤100,A[i] ≤N,B[i] ≤100,T[i] ≤2000,所有数为正整数。

题解:我们发现Branimirko会先往一个方向走,走到某个地方后往回走,每次向左走会走到上一次原来的左端点的左边,向右走会走到原来右端点的右边,因为左右端点间的精灵不是消失了就是被抓了,所以不会为了走到左右端点间停下。

设f[i,j,k]表示走了i到j,花了k的时间的最大收益。i<j表示当前在节点i否则在节点j。

记忆化宽搜,因为每次向左走会走到min(i,j)-1,向右走会走到max(i,j)+1

即向左走会走到左端点左一个,向右走会走到右端点右一个。

判断一下走到新节点的时间是否小于其消失时间,可以就加上它的分值并比较,否则直接将当前状态与其比较,更优就更新,并把其加入队列,答案为所有状态的分数最大值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值