CF1427C The Hard Work of Paparazzi

题意:有一个r*r(r≤500)的地图,起始位置是(1,1),有n(n≤1e5)个人在特定时间会在某个点出现一次(按照时间升序给出),问最多能和多少个人相遇。

解法:这道题的思路很新颖,我一开始一直考虑bfs,却没办法写出来,因为n太大了。完全没有想到是线性dp 。刚开始听说这题正解是dp的时候,就觉得像是n ^ 2的循环(dp[i]代表到第i个时间时,前面最多能遇到多少人),但是明显会超时,这里要发现一个特点,如果是n ^ 2的那种循环,会发现r根本没有用处,其实就是用r去优化第二重循环。首先,两个点之间的距离最多是2r,且时间严格升序,那么i一定能从[0,i-2r]转移过来,最大必然是在[i-4r,i-2r]之间(我考虑原因应该是这里的值都是由之前的值更新而来的,因而可以缩减到这个范围),但对于[i-2r,i-1]这一部分就需要判断啦(以下代码也判断了[i-4r,i-2r]的)。这样的话,n ^ 2的复杂度能优化到n * r,跟昨天那道题目有点像。

感谢评论区大佬指出呀~

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e5+10;
int dp[N];
struct xx {int t, x, y;
}a[N];
int dis(xx a1, xx a2) {return abs(a1.x-a2.x)+abs(a1.y-a2.y);
}
int main() {memset(dp, -1, sizeof dp);int r, n;scanf("%d%d", &r, &n);a[0].x = 1, a[0].y = 1; dp[0] = 0;for(int i = 1; i <= n; ++i) scanf("%d%d%d", &a[i].t, &a[i].x, &a[i].y);for(int i = 1; i <= n; ++i) {for(int j = max(0, i-1-r*4); j < i; ++j) {if(dp[j] != -1 && a[i].t - a[j].t >= dis(a[i], a[j])) dp[i] = max(dp[i], dp[j]+1);}}int ans = 0;for(int i = 1; i <= n; ++i) ans = max(ans, dp[i]);printf("%d\n", ans);return 0;
}

CF1427C The Hard Work of Paparazzi题解相关推荐

  1. [JS][dfs]题解 | #迷宫问题#

    题解 | #迷宫问题# 题目链接 迷宫问题 题目描述 定义一个二维数组 N*M ,如 5 × 5 数组下所示: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 1, 1 ...

  2. [JS][dp]题解 | #打家劫舍(一)#

    题解 | #打家劫舍(一)# 题目链接 打家劫舍(一) 题目描述 描述 你是一个经验丰富的小偷,准备偷沿街的一排房间,每个房间都存有一定的现金,为了防止被发现,你不能偷相邻的两家,即,如果偷了第一家, ...

  3. [JS]题解 | #魔法数字#

    题解 | #魔法数字# 题目链接 魔法数字 题目描述 牛妹给牛牛写了一个数字n,然后又给自己写了一个数字m,她希望牛牛能执行最少的操作将他的数字转化成自己的. 操作共有三种,如下: 在当前数字的基础上 ...

  4. [JS]题解 | #岛屿数量#

    题解 | #岛屿数量# 题目链接 岛屿数量 题目描述 时间限制:1秒 空间限制:256M 描述 给一个01矩阵,1代表是陆地,0代表海洋, 如果两个1相邻,那么这两个1属于同一个岛.我们只考虑上下左右 ...

  5. [JS] 题解:提取不重复的整数

    题解:提取不重复的整数 https://www.nowcoder.com/practice/253986e66d114d378ae8de2e6c4577c1 时间限制:1秒 空间限制:32M 描述 输 ...

  6. 洛谷-题解 P2672 【推销员】

    独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...

  7. [洛谷1383]高级打字机 题解

    题解 这道题一看就珂以用主席树啊 这是一道神奇的题目,那么我们先敲一个主席树,然后维护一个数组len,表示下一次应该在len + 1插入, 之后对于T操作,在上一个版本的len + 1上直接执行插入 ...

  8. luogu P1549 棋盘问题(2) 题解

    luogu P1549 棋盘问题(2) 题解 题目描述 在\(N * N\)的棋盘上\((1≤N≤10)\),填入\(1,2,-,N^2\)共\(N^2\)个数,使得任意两个相邻的数之和为素数. 例如 ...

  9. 【题解搬运】PAT_L1-009 N个数求和

    从我原来的博客上搬运.原先blog作废. (伪)水题+1,旨在继续摸清这个blog(囧 题目 就是求N个数字的和.麻烦的是,这些数字是以有理数"分子/分母"的形式给出的,你输出的和 ...

最新文章

  1. “金财工程”网络安全 五
  2. iframe 返回上一页_寻找高颜值小姐姐难吗!直到我在Github上发现了这个Python库
  3. sh文件启动java_shell java应用启动脚本(app.sh)
  4. http的方式调用接口
  5. 【Python基础】Jupyter Notebook最常用的五大配置技巧
  6. IA-32系统编程指南 - 第三章 保护模式的内存管理【2】
  7. cad转shp格式带属性_Excel、Word、PPT、CAD办公格式怎么转?方法汇总,可批量
  8. javascript-流程控制-循环-分支-三元运算符
  9. 如何利用期限来完成任务
  10. 使用计算机控制台方法,故障控制台使用方法
  11. CentOS7下安装MySQL5.7安装与配置(YUM)
  12. BP神经网络——如何进行权值的初始化
  13. 哈理工c语言,哈理工C语言试题.doc
  14. python set集合排序_Python Set集合
  15. iPad Java编辑器_学会这五款软件 让iPad Pro在你手里变得更强大
  16. docker卸载mysql_Docker卸载镜像
  17. GenericObjectPoolConfig属性
  18. 使用Go清理数据:第1部分
  19. 你怎么看欧阳娜娜空降阿里p8?
  20. DELL H61刷BIOS开启AHCI

热门文章

  1. 周鸿祎的“寄生战略”
  2. 如何使用视频编解码器实现多方语音对讲?
  3. ipad mini 无法上网
  4. 独家公布!985/211高校毕业生源数量统计Top10揭晓……
  5. war包放到webapps下,启动tomcat,tomcat正常,却无法加载项目
  6. VRRP协议原理与配置
  7. 周鸿祎荐书:《马云的内部讲话》
  8. 共享wifi项目怎么样
  9. 我今天就带大家了解一下共享WiFi项目,为什么如此的受大家喜爱,以及它闪亮的地方在哪.
  10. C# EXCEL创建,编辑,导出,按模板保存以及Excel与 DataGridView互转