可爱精灵宝贝:dp
拒绝听搜索.etc水过的。数据太弱了(尽管考场上我凭借数据太水骗了好多分)
我讲的思路和下发的题解一样。(因为我不会所以只能颓它啊)
首先你要相信这题精灵就100个,真的只有100个,这次数据范围没错。
然后你的复杂度就可以愉快地用m了。
因为小精灵就m个所以实际上有用的位置也最多只有m+1个(算起点)
可以证明:如果路径中存在折返,那么一定发生在某一个小精灵的位置上。
因为如果你在其它位置折返,那一定不如在上一个经过的小精灵处就折返,这样才能更早到达对面的位置
也可以证明:如果过程中走过的坐标最小是l最大是r,那么接下来要么就是直线前往l左面的第一只小精灵,要么就是直线前往r右面的第一只小精灵。
因为l到r区间内的精灵都被你以前路过时抓走了,如果你想要更多的分数就需要扩展你的活动区间。
而从(l,r)->(l,r+2)可以分解成(l,r)->(l,r+1)->(l,r+2)来逐步考虑,所以现在的问题就是dp统计一次往两边扩展1个位置。
dp定义已经出来了,tl[i][j][k]表示已经走过区间j~k,目前时间为i的最大分数,此时在左端点。tr[i][j][k]同理只不过在右端点。
然而数组开不开,需要离散化一下有小精灵的坐标。
由本层向下一层转移就好。
理论复杂度爆踩搜索,实际运行时间被爆踩。
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
struct qs{int x,v,t;friend bool operator<(qs a,qs b){return a.x<b.x;}}q[];
int tl[][][],tr[][][],x[],ref[],n,m,k,o,p,e[][],ans;
int main(){
scanf("%d%d%d",&n,&k,&m);x[]=k;
for(int i=;i<=m;++i)scanf("%d%d%d",&q[i].x,&q[i].v,&q[i].t),x[i+]=q[i].x;
sort(x+,x++m);memset(tl,0xa0,sizeof tl);memset(tr,0xa0,sizeof tr);
for(int i=;i<=m+;++i)if(!ref[x[i]])x[++o]=x[i],ref[x[i]]=o;
for(int i=;i<=m;++i)if(q[i].x==k)p+=q[i].v;
tl[][ref[k]][ref[k]]=tr[][ref[k]][ref[k]]=p;
for(int i=;i<=m;++i)e[q[i].t][ref[q[i].x]]+=q[i].v;
for(int i=;i<=o;++i)for(int j=;j;--j)e[j][i]+=e[j+][i];
for(int t=,T;t<=;++t)for(int i=;i<=o;++i)for(int j=i;j<=o;++j){
T=t+x[i]-x[i-];if(i!=&&T<=)tl[T][i-][j]=max(tl[T][i-][j],tl[t][i][j]+e[T][i-]);
T=t+x[j]-x[i-];if(i!=&&T<=)tl[T][i-][j]=max(tl[T][i-][j],tr[t][i][j]+e[T][i-]);
T=t+x[j+]-x[j];if(j!=o&&T<=)tr[T][i][j+]=max(tr[T][i][j+],tr[t][i][j]+e[T][j+]);
T=t+x[j+]-x[i];if(j!=o&&T<=)tr[T][i][j+]=max(tr[T][i][j+],tl[t][i][j]+e[T][j+]);
tl[t+][i][j]=max(tl[t+][i][j],tl[t][i][j]);
tr[t+][i][j]=max(tr[t+][i][j],tr[t][i][j]);
}
for(int i=;i<=o;++i)for(int j=i;j<=o;++j)ans=max(ans,max(tl[][i][j],tr[][i][j]));
printf("%d\n",ans);
}
码量有点大
可爱精灵宝贝:dp的更多相关文章
- 可爱精灵宝贝 DP/爆搜
考崩了 T2 这题是个DP的好题啊(凡是我不会的都是好题,所以所有的题都是好题(雾)) DP思路: 分析性质:这个人对于路上的小精灵,能收集就一定会收集,即他每次都会收集这一段区间的小精灵 然后就考虑 ...
- [jzoj 5770]【2018提高组模拟A组8.6】可爱精灵宝贝 (区间dp)
传送门 Description Branimirko是一个对可爱精灵宝贝十分痴迷的玩家.最近,他闲得没事组织了一场捉精灵的游戏.游戏在一条街道上举行,街道上一侧有一排房子,从左到右房子标号由1到n. ...
- [CSP-S模拟测试]:可爱的精灵宝贝(搜索)
题目描述 $Branimirko$是一个对可爱精灵宝贝十分痴迷的玩家.最近,他闲得没事组织了一场捉精灵的游戏.游戏在一条街道上举行,街道上一侧有一排房子,从左到右房子标号由$1$到$n$.刚开始玩家在 ...
- NOIP模拟 18
这次时间分配不合理,沉迷大模拟无法自拔 虽然A了但是根本就没给T3留时间555 T3如果有时间看看数据范围应该可以想到QJ掉20分的555 T1 引子 打这题的时候感觉自己在做图像处理.. 然后调了各 ...
- 2019.8.12 NOIP模拟测试18 反思总结
写个博客总是符合要求的对吧 回来以后第一次悄悄参加考试,昨天全程围观… 然后喜提爆炸120分wwwwwwwww T1用了全机房最慢的写法,导致改掉死循环T掉的一个点以后还是死活过不了最后一个点.T2全 ...
- 英语口语练习系列-C19-喜欢某人
简单词汇 1. chair [tʃeə(r)] n. 椅子 chair = ch + air拼读的时候ch发音以及air发音 [ ] sit on a chair 坐在椅子上 [ ] a table ...
- 【LOJ】#2024. 「JLOI / SHOI2016」侦查守卫
题解 童年的回忆! 想当初,这是我考的第一次省选,我当时初二,我什么都不会,然后看着这个东西,是不是能用我一个月前才会的求lca,光这个lca我就调了一个多小时= =,然后整场五个小时,我觉得其他题不 ...
- (四)DIH导入结构化数据
(四)DIH导入结构化数据 目前大多数的应用程序将数据存储在关系数据库(如oracle.sql server .mysql等).xml文件中.对这样的数据进行搜索是很常见的应用.所谓的DataImpo ...
- html+css第八篇滑动门和可爱的css精灵
滑动门: 滑动门并不是一项全新的技术,它是利用背景图像的可层叠性,并允许他们在彼此之上进行滑动,以创造一些特殊的效果. CSS精灵 CSS Sprites在国内很多人叫CSS精灵,是一种网页图片应用处 ...
随机推荐
- IDEA 学习笔记之 Web项目开发
Web项目开发: 添加新模块: 起名: 添加jars: 添加Tomcat/local: 添加项目: 启动Tomcat: 看到web页面: 修改页面: 重新部署页面:
- 基于动态代理的WebAPI/RPC/webSocket框架,一套接口定义,多个通讯方式
API/RPC/webSocket三个看起来好像没啥相同的地方,在开发时,服务端,客户端实现代码也大不一样 最近整理了一下,通过动态代理的形式,整合了这些开发,都通过统一的接口约束,服务端实现和客户端 ...
- 手把手教你安装Eclipse最新版本的详细教程 - 大佬的鸡肋,菜鸟的盛宴(非常详细,非常实用)
简介 首先声明此篇文章主要是针对测试菜鸟或者刚刚入门的小伙们或者童鞋们,大佬就没有必要往下看了. 写这篇文章的由来是因为后边要用这个工具,但是由于某些原因有部分小伙伴和童鞋们可能不会安装此工具,为了方 ...
- Android OkHttp + Retrofit 取消请求的方法
本文链接 前言 在某一个界面,用户发起了一个网络请求,因为某种原因用户在网络请求完成前离开了当前界面,比较好的做法是取消这个网络请求.对于OkHttp来说,具体是调用Call的cancel方法. 如何 ...
- 清除SQL Server Management Studio的最近服务器列表
C:\Users\dell\AppData\Roaming\Microsoft\SQL Server Management Studio\12.0\SqlStudio.bin
- 面试常考各类排序算法总结.(c#)
前言 面试以及考试过程中必会出现一道排序算法面试题,为了加深对排序算法的理解,在此我对各种排序算法做个总结归纳. 1.冒泡排序算法(BubbleSort) 1.1 算法描述 (1)比较相邻的元素.如果 ...
- eventfd(2) 结合 select(2) 源码分析
eventfd(2) 结合 select(2) 源码分析 本文代码选自内核 4.17 eventfd(2) - 创建一个文件描述符用于事件通知. 使用 源码分析 参考 #include <sys ...
- ASP.NET Core在 .NET Core 3.1 Preview 1中的更新
.NET Core 3.1 Preview 1现在可用.此版本主要侧重于错误修复,但同时也包含一些新功能. 这是此版本的ASP.NET Core的新增功能: 对Razor components的部分类 ...
- 不吹不黑也不撕,我们就简简单单谈谈Vue
Vue在近两年中得到了快速的发展,17年初开始,市场上对Vue开发者的需求量越来越大,北京在招的前端职位中40%的岗位对Vue技能有要求,在杭州,虽然React仍然是主力框架,但是Vue使用的比例也在 ...
- 怎样快速找到某一行代码的git提交记录
利用notepad++提高问题分析效率,以及快速找到某一行代码的git提交记录 1. 全目录搜索/替换 Notepad++是一款强大的文本编辑工具,当知道大概的关键词但不知道在哪个日志时可以使用not ...